最近アダルトサイト運営をしていて「○○○ その20」などのタイトルをつけることが多いなと気がついたのですが、WordPressの関連記事表示プラグインではそういう「その20」などというシリーズものでの関連記事取得を行ってくれないことが歯がゆかったので、自分でどうにかできないかと試してみました。
そしたら案外簡単にできたので記事にしてみました。
ちなみに「get_posts」での前提で書いていますが、条件の箇所を変えてあげれば「wp_query」などでも可能です。
<?php //カテゴリとか記事IDとかの取得処理 $cat = get_the_category(); $cat = $cat[0]; $getCat = get_cat_name($cat->term_id); $postID = $post->ID; //現在の記事タイトルを取得、変数に格納 $posttitle = get_the_title(); //よく使う「その○」「part○」が来たらそのタイトルの「その」より前を取得、検索条件です。 if(mb_strpos($posttitle,'part') !== false){ $searchTitle = explode('part',$posttitle); }else{ $searchTitle = explode('その',$posttitle); } //上記で取得したタイトルに空白が入っていたので削除、たぶんもっと綺麗に出来るけど記事用に書いてないから雑になってるだけです。 $searchTitle = rtrim($searchTitle[0]); $searchTitle = rtrim($searchTitle,' '); //本命処理6とあるのは6件表示という意味で、変えて良いです。 //'s'というのがタイトル検索の処理です。 // 'post__not_in' => array($postID)がないと現在表示の記事も検索条件に入ってしまうのでそれを除外しています。 $postCount = 6; $posts = get_posts(array( 's'=>$searchTitle, 'posts_per_page' => $postCount, 'orderby' => 'rand', 'category' => $cat->term_id, 'post__not_in' => array($postID) )); //もしその「○○シリーズが6件無かった場合は同カテゴリから足りない分の記事を探す処理。 if(count($posts) !== $postCount){ $posts2 = get_posts(array( 'posts_per_page' => $postCount-count($posts), 'orderby' => 'rand', 'category' => $cat->term_id, 'post__not_in' => array($postID) )); foreach($posts2 as $post){ $postID = $post->ID; ?> //ここで記事表示処理 echo get_the_title($postID);//とか自由にしてください。 <?php } wp_reset_query(); } foreach($posts as $post){ $postID = $post->ID; $recposttitle = get_the_title($postID); ?> //ここで記事表示処理 echo get_the_title($postID);//とか自由にしてください。 <?php } wp_reset_query(); ?>
無駄なソースもあると思うので時間があれば整形します。
プラグイン化してもいいかもですね。
では次回の記事でお会いしましょう!
コメント