使用自定义域防止wp_sert_post中的重复帖子

时间:2011-06-10 作者:Morteza

我的源链接与此相关:

http://sample.com/entertainment/default.aspx?tabid=2305&conid=102950
http://sample.com/entertainment/default.aspx?tabid=2418&conid=104330
http://sample.com/entertainment/default.aspx?tabid=2429&conid=104264
http://sample.com/entertainment/default.aspx?tabid=2305&conid=102949
.
.
.
我缓存内容表单链接。我使用wp\\u insert\\u post将缓存内容从源站点发布到wordpress:

 $my_post = array(
\'post_title\' => "$title",
\'post_content\' => "$content",
\'post_status\' => \'draft\',
\'post_author\' => 1,
\'post_category\' => array(1),
);
 wp_insert_post( $my_post );
我想把每个链接放在自定义字段和下一个缓存中,在发布到WP之前,检查自定义字段中的链接的新链接。如果链接重复,请防止插入内容。

对不起,我的描述不好。

5 个回复
最合适的回答,由SO网友:Bainternet 整理而成

要在post meta中保存链接,可以使用update_post_meta

例如:

$url = "http://sample.com/entertainment/default.aspx?tabid=2305&conid=102950"
$my_post = array(
    \'post_title\' => "$title",
    \'post_content\' => "$content",
    \'post_status\' => \'draft\',
    \'post_author\' => 1,
    \'post_category\' => array(1),
);

$post_id =  wp_insert_post( $my_post );
update_post_meta($post_id,\'source_link\',$url);
为了防止插入,请添加一个简单的条件检查:

$args = array("meta_key" => "source_link", "meta_value" =>$url);
$posts = get_posts($args);
if (count($posts) < 0){
    //add new post
}
<小时>
if (count($posts) < 0){
    //add new post
}
不工作,请将其更改为

if (empty($posts)){ 
    //add new post
}

SO网友:katie

这是每个人都会面临的非常奇怪的问题,尤其是如果他们在某个循环中调用此函数<foreach> <for> <while>

你应该试试这个

if (!get_page_by_title($title, \'OBJECT\', \'post\') ){

 $my_post = array(\'post_title\' => $title,
                         \'post_content\' => \'Content\',
                         \'tags_input\' => $tags,
                         \'post_category\' => array(2),
                         \'post_status\' => \'publish\'
                        );

  $result = wp_insert_post( $my_post );
}

注意get_page_by_title 函数,用于确定是否存在具有相同标题的帖子,如果是,则不调用wp_insert_post.

我希望这将有助于解决同样的问题。

SO网友:Álex Acuña Viera

如果您在插入帖子之前使用类似wpdb的查询,包括wp\\u posts和wp\\u postmeta搜索此meta。。。

$string = \'the_url.html\';
$output = $wpdb->get_var($wpdb->prepare("SELECT count(id)
            FROM $wpdb->posts wpo, $wpdb->postmeta wpm
            WHERE wpo.ID = wpm.post_id
            AND wpm.meta_key = \'name_of_ur_meta\'
            AND wpm.meta_value = \'$string\'"));      

if(empty($output)) {
    /* Insert your post */
    } else {
            /* Update the post or do other thing */
    };

SO网友:CK MacLeod

根据上面的一个答案,如果问题是函数发生在某种循环中,那么解决问题的经典方法是引入一个标志。

$ran_already_flag = false;

{loop begins}

if ( ! $ran_already_flag ) {

    $my_post = array(\'post_title\' => $title,
                     \'post_content\' => \'Content\',
                     \'tags_input\' => $tags,
                     \'post_category\' => array(2),
                     \'post_status\' => \'publish\'
                    );


    $result = wp_insert_post( $my_post );
    $ran_already_flag = true;

}

{loop ends}
如果问题不是函数在某种循环中运行,那么我想知道是什么导致了它:可能是函数附加到了一个钩子,该钩子在整个脚本过程中运行了两次:例如,“update\\u post”可能运行了两次。在这种情况下,您可能会求助于其他答案中提供的其他选项之一,尽管它们实际上相当于通过其他方式创建标志(指定的帖子标题是标志),如果需要,可以传递更简单的标志变量。

SO网友:Sergio David Acosta

不要使用自定义字段进行修复,最好尝试以下操作:

if ( ! defined( \'DOING_AJAX\' ) || ! DOING_AJAX ){
    $post_id = wp_insert_post( $my_post );
}

结束

相关推荐

收到警告:MANAGE_POSTS_CUSTOM_COLUMN()缺少参数2?

我创建了一个自定义帖子类型和两个自定义分类法,并将它们显示在“管理帖子”部分,但我收到以下警告:警告:在/home/aleche23/alexchen中,manage\\u posts\\u custom\\u column()缺少参数2。信息/wp内容/主题/techozoic流体/功能/自定义帖子类型。php在线95图片:<?php /** * Create the Blocks custom post type and the Sections custom tax