从RSS提要更新POSTDATA而不在wp_INSERT_POST上创建副本

时间:2016-10-22 作者:re-boot

我正在从工作列表网站导入rss提要,并为我使用wp\\U insert\\U post导入的每个列表创建一个帖子,以保存数据并在以后的存档中显示过期的列表。

我需要一个解决方案,以防止wp\\U insert\\U post创建重复,同时如果某些值已从源中更新了作业列表,它仍会更新post。每个列表都有自己的ID,称为提要中的广告ID。

只需澄清一下,“如果(!get\\u page\\u by\\u title)”在许多工作列表可以具有相同标题时不会起作用,因此解决方案最终会排除大多数列表。代码已经存在,一切都很好,我只需要一个解决方案来解决我正在解释的问题。只是显示一些代码,以便您了解我在这里做什么`

  $post = array(
    \'post_content\'   => $item->description,
    \'post_date\'      => $item_date,
    \'post_title\'     => $item_title,
    \'post_status\'    => \'publish\',
    \'post_type\'      => \'jobs\',




  );
  $id = wp_insert_post($post);

  $metdata = array(
  \'link\' => $item->link,
  \'date\' => $item ->date,
  \'company_logo_path\' => $item->CompanyLogoPath,
  \'company_profile_text\' => $item->CompanyProfileText,

2 个回复
最合适的回答,由SO网友:Jeroen Schmit 整理而成

您可以保存AdvertID 并使用它检查作业之前是否已导入。

/**
 * Gets a job by AdvertId.
 * 
 * @param   string          $advert_id  The AdvertId.
 * @return  WP_Post|bool                The job or <false> if no job is found.
 */
function get_job_by_advert_id( $advert_id ) {
    $args = array(
        \'post_type\' => \'jobs\',
        \'meta_query\' => array(
            \'key\' => \'advert_id\',
            \'value\' => $advert_id,  
        ),
    );
    $posts = get_posts( $args );

    if (empty($posts)) {
        return false;
    }

    return $posts[0];
}

// Check if the job was imported before.
$job = get_job_by_advert_id( $item->AdvertId );

if ( $job ) {

    // The job was imported before, update it.
    $args = array(
        \'ID\' => $job->ID,
        \'post_content\'   => $item->description,
        \'post_date\'      => $item_date,
        \'post_title\'     => $item_title,
    );

    $post_id = wp_update_post( $args ); 

} else {

    // The job is new. Insert it.
    $args = array(
      \'post_content\'   => $item->description,
      \'post_date\'      => $item_date,
      \'post_title\'     => $item_title,
      \'post_status\'    => \'publish\',
      \'post_type\'      => \'jobs\',
    );
    $post_id = wp_insert_post($args);   

    // Save the AdvertId for the next import.
    add_post_meta( $post_id, \'advert_id\', $item->AdvertId, true);

}

SO网友:Benoti

您最终可以在wp\\u insert\\u post$参数中设置唯一的“post\\u name”。只需创建一个函数来生成它,就像密码生成器一样。

例如:

创建post\\u名称的函数:

function keygen($length=10)
{
    $key = \'\';
    list($usec, $sec) = explode(\' \', microtime());
    mt_srand((float) $sec + ((float) $usec * 100000));

    $inputs = array_merge(range(\'z\',\'a\'),range(0,9),range(\'A\',\'Z\'));

    for($i=0; $i<$length; $i++)
    {
        $key .= $inputs{mt_rand(0,61)};
    }
    return $key;
}
对于wp\\u insert\\u post():

$args = array(
         \'post_type\' => $cpt_name,
         \'post_title\'=> $list_name,
         \'post_content\'  => \'\',              
         \'post_status\'   => \'publish\',
         \'post_name\' => keygen(12) 
       );

$post_id = wp_insert_post($args);
当然,可以根据需要设置自己的变量和条件。

希望它能给你一个如何完成工作的方向。