APIと連携してサイトを作成していくと、しばしば遭遇するのがタイトル・記事が全く同じ重複ページが自動生成されしまうトラブルです。
そうなるとサイト内が重複コンテンツであふれてしまうため、色々回避策を練るのですが、私が一番確実だと思う方法が以下の方法です。
(ワードプレスでの使用を想定しています。)
functions.php に下記スクリプトを貼り付けます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//もし投稿内に全く同じ文字列を含む場合にはtrueを返し、そうでない場合にはfalseを返します。 function exist_duplicates($content){ $args = array( 'post_status' => 'any', 's'=>$content, 'exact'=>true ); $loops= new wp_query($args); if($loops->have_posts()) { return true; }else{ return false; } } |
wp_insert_post()を行う前にif文で条件分岐します。タイトルや本文に同様の文章が含まれない場合だけwp_insert_post()を実行するようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//$titleか$contentを丸々含む投稿がどこかに存在する場合にはwp_insert_post()を行いません。 $title="記事のタイトル"; $content="記事の本文"; if(!exist_duplicates($title) && !exist_duplicates($content)){ $my_post=array( 'post_title' => $title, 'post_content' => $content, 'post_status'=>'publish' ); wp_insert_post( $my_post); } |
以上の手順で重複投稿はほぼ確実に防げるようになるはずです。
コメント
全く同じ投稿が存在した場合、
その投稿のタイトルと内容を返すようにしたいのですがどうやって書けばいいでしょうか?
上の方法で、$titleに投稿のタイトル、$contentに投稿の内容が格納されているので、そのまま利用できるのではないかと思いますが、いかがでしょうか?