私のソースリンクは、これを裏付けるものです。
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_insert_postを使います:
$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に投稿する前に、各リンクをカスタムフィールドと次のキャッシュに入れて、カスタムフィールド内のリンクで新しいリンクを確認します。リンクが繰り返される場合は、コンテンツを挿入しないでください。
私の悪い説明ですみません。
リンクを投稿メタに保存するには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
}
これはかなり奇妙な問題で、特にループ<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
を呼び出しません。
これが、同じ問題に苦しんでいる人の助けになることを願っています。
あなたが投稿を挿入する前にこのメタを検索するwp_postsとwp_postmetaを含むwpdbクエリのような何かを使用するなら多分...
$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 */
};
上記の1つの答えが示すように、関数がある種のループ内で発生していることが問題である場合、古典的な(リソースをあまり必要としない)解決方法はフラグを導入することです。
$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}
関数が何らかのループ内で実行されているという問題ではない場合は、その原因が何であるかを知りたいと思います。関数が2回実行されるフックに接続されている可能性があります。スクリプト全体:たとえば、 "update_post"が2回実行される可能性があります。その場合、他の答えで提供されている他の選択肢の1つに頼るかもしれませんが、それらは他の方法でフラグを作成することになり(指定された役職はフラグです)。必要であれば。
それを修正するためにカスタムフィールドを使用しないでください。
if ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ){
$post_id = wp_insert_post( $my_post );
}