1

I am trying to use wp_insert_attachment while using wp_insert_post. It's successfully creating the post and attachment. It have no problem if I only use the wp_insert_post function, but when I activating the wp_insert_attachemnt, the script create both, duplicate posts and attachments 3 times of the previous created posts and attachments.

Here is the code (UPDATED):

add_action('admin_menu', 'awpht_admin_opt');

function awpht_admin_opt() {
    add_plugins_page('AWPHT Control', 'Automatic Photoblog', 'manage_options', 'awpht_option_control', 'awpht_option_control_page');
}
function enqueue_awpht_style() {
    wp_register_style( 'awpht_admin_style', plugins_url('awpht-main.css', __FILE__) );
    wp_enqueue_style('awpht_admin_style');
}

add_action( 'admin_enqueue_scripts', 'enqueue_awpht_style' );


//Administration Menu
function awpht_option_control_page() {
?>


<div id="">
<h1>Automatic Photoblog</h1>
<form method="post" action="">
<table>
<tr><td>Post Category</td><td><input type="text"/></td></tr>
<tr><td>Post Status</td><td><select name="awpht_post_status">
<option>Publish</option>
<option>Draft</option>
</select></td></tr>
</table>

<input type="submit" name="awpht-create-posts" class="button button-primary button-large" id="awpht-create-posts" value="Create Posts"/>
</form>

</div>


<?php
if (isset($_POST['awpht-create-posts'])) {

//Get Images Folder Path
$awphtdir = wp_upload_dir();
$awphtimgdir = $awphtdir['basedir'];
$upload_path = $awphtimgdir."/photoblog/";


$awpharritle = array();
$awpht_content = array();
$awphtfname = array();
$attch_imgurl = array();
$attch_title = array();
$attch_fname = array();


// Fetch Images Names From Folder
foreach(glob($upload_path."*.*") as $filename){
$attch_fname[] = $awphtdir['basedir']."/attachments/".basename($filename);
// Filwname with extension
$allfname = basename($filename);
$awphtfname[] = $allfname;

//Filename without Extension
$awpht_title = preg_replace("/\\.[^.\\s]{3,4}$/", "",basename($filename));
$attch_title[] = $awpht_title;
$adspc = array("-", "_", ".");

//Post Title
$awphttitle = str_replace($adspc, " ", $awpht_title);
$awpharritle[] = $awphttitle;

//Get image url
$awpht_dir = wp_upload_dir();
$awpht_imgurl = $awpht_dir['baseurl'].'/photoblog/'.$allfname;
$attch_imgurl[] = $awpht_imgurl;

//Post Content
$awpht_content[] = "<img src='".$awpht_imgurl."'/>";
        }

//Create Posts With The Available Data
$year = '2014';
$postdate = $postdate = date($year.'-02-23 18:57:33');
$awpht_length = count($awpharritle);

for($i=0; $i<$awpht_length; $i++ ) {

//Check If Post Already Exist/ Prevent Duplicates
if (!get_page_by_title($awpharritle[$i], 'OBJECT', 'post')){

$awpht_the_posts[$i] = array(
  'post_title'    => $awpharritle[$i],
  'post_content'  => $awpht_content{$i},
  'post_date'     =>   $postdate,
  'post_status'   => 'publish',
  'post_author'   => 1,
);
// Insert the post into the database
$post_id = wp_insert_post( $awpht_the_posts[$i]);

//Set category and tag
wp_set_post_terms( $post_id , 2 ,  'category' );
wp_set_post_terms( $post_id , 'test, text, play' ,  'post_tag' );


//INSERT ATTACHMENT
$awpht_filetype = wp_check_filetype($awphtfname[$i], null );
$awpht_attachment = array(
        'guid' => $attch_imgurl[$i],
        'post_mime_type' => $awpht_filetype['type'],
        'post_type' => 'attachment',
        'post_title' => $attch_title[$i],
        'post_content' => '',
        'post_status' => 'inherit'
                    );  
$awphtattach_id = wp_insert_attachment( $awpht_attachment, $attch_fname[$i], $post_id );


//Create thumbnail with resized images
require_once(ABSPATH . 'wp-admin/includes/image.php');                
$awphtattach_data = wp_generate_attachment_metadata( $awphtattach_id, $attch_fname[$i] );
wp_update_attachment_metadata( $awphtattach_id, $awphtattach_data );


// Set Featured Image
set_post_thumbnail( $post_id, $awphtattach_id);
//update_post_meta($post_id, '_thumbnail_id', $awphtattach_id);
echo get_the_post_thumbnail($post_id, 'thumbnail'); 
            }
        }
    }   
}

My question: How to prevent the script from creating duplicate attachments and posts?

Best Regards

  • What's triggering all this code? Where is it happening? – brasofilo Nov 1 '13 at 21:10
  • Code updated. That code creating posts from image files inside a folder. When the posts created, it is also creating more image files inside the folder where the files is stored. Those files creation is triggered by this code require_once(ABSPATH . 'wp-admin/includes/image.php'); $awphtattach_data = wp_generate_attachment_metadata( $awphtattach_id, $attch_fname[$i] ); wp_update_attachment_metadata( $awphtattach_id, $awphtattach_data );. I am trying to use two separate folder to prevent it. But the problem now is it will double server space usage. – KeepMove Nov 1 '13 at 23:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.