賢威7.0

賢威7の関連記事を設定無しで表示させる方法

今回はWordPressテーマ: 賢威7 で表示される「関連記事」を、投稿の画面から設定せずに毎回表示させる方法について書いてみたいと思います。

この関連記事の機能、賢威7で追加されて本当に便利なんですが、表示するには投稿のページで毎回設定しないといけないんですよね。。。

設定なしで毎回表示させたい!という人もいるかと思うので、今回は設定をせずに、毎回関連記事をカテゴリベースで表示させる方法を紹介します。

カスタマイズ後

関連記事をカテゴリベースで表示
related-post-category-after

関連記事をタグベースで表示
related-post-tag-after

[ad]

今回はPHPファイルを編集するので、バックアップを取ってから作業するようにして下さい。
画面が真っ白になることもあるので、小さいものでもPHPコードのミスには要注意です。

1. 関連記事をカテゴリベースで表示させる

まずは関連記事をカテゴリベースで表示させましょう。

functions.php の797行目付近にある function get_relation_keni() という関数に関連記事のコードが書かれているので、今回はこの関数を編集してます。

get_relation_keni() の関数をみてもらうと、下のようなコードがあると思います。
(「カテゴリから取得する」というコメントが目印です)

if ($link_count < 5) {

    // カテゴリから取得する   
    $category_relation = get_post_meta(get_the_ID(), 'category_relation', true);
    if (isset($category_relation) && $category_relation == "y") {
        $target_category = get_the_category(get_the_ID());
        if (isset($target_category) && is_array($target_category)  && count($target_category) > 0) {
            foreach ($target_category as $cat_val) {
                $cat_list[] = $cat_val->cat_ID;
            }
        }

        if (isset($cat_list) && count($cat_list) > 0) {
            $args = array( 'posts_per_page' => 5,'category' => implode(",", $cat_list), 'orderby' => 'rand', 'exclude' => get_the_ID());
            $rand_posts = get_posts( $args );
            if (count($rand_posts) > 0) {
                foreach ($rand_posts as $cat_posts) {
                    if ($link_count < 5) {
                        $image = (get_the_post_thumbnail($cat_posts->ID)) ? "<div class=\"related-thumb\"><a href=\"".get_permalink($cat_posts->ID)."\" title=\"".esc_attr($cat_posts->post_title)."\" target=\"_blank\">".get_the_post_thumbnail($cat_posts->ID, 'ss_thumb', array('class' => 'relation-image', 'alt' => esc_attr($cat_posts->post_title)))."</a></div>" : "";
                        $relation .= "<li>".$image."<p><a href=\"".get_permalink($cat_posts->ID)."\" title=\"".esc_attr($cat_posts->post_title)."\">".esc_attr($cat_posts->post_title)."</a></p></li>\n";
                        $link_count++;
                    }
                }
            }
        }
    }

このコードを、以下のコードで置き換えます。
&& $category_relation == "y" を削除)

    if ($link_count < 5) {

        // カテゴリから取得する   
        $category_relation = get_post_meta(get_the_ID(), 'category_relation', true);
        if (isset($category_relation)) {
            $target_category = get_the_category(get_the_ID());
            if (isset($target_category) && is_array($target_category)  && count($target_category) > 0) {
                foreach ($target_category as $cat_val) {
                    $cat_list[] = $cat_val->cat_ID;
                }
            }

            if (isset($cat_list) && count($cat_list) > 0) {
                $args = array( 'posts_per_page' => 5,'category' => implode(",", $cat_list), 'orderby' => 'rand', 'exclude' => get_the_ID());
                $rand_posts = get_posts( $args );
                if (count($rand_posts) > 0) {
                    foreach ($rand_posts as $cat_posts) {
                        if ($link_count < 5) {
                            $image = (get_the_post_thumbnail($cat_posts->ID)) ? "<div class=\"related-thumb\"><a href=\"".get_permalink($cat_posts->ID)."\" title=\"".esc_attr($cat_posts->post_title)."\" target=\"_blank\">".get_the_post_thumbnail($cat_posts->ID, 'ss_thumb', array('class' => 'relation-image', 'alt' => esc_attr($cat_posts->post_title)))."</a></div>" : "";
                            $relation .= "<li>".$image."<p><a href=\"".get_permalink($cat_posts->ID)."\" title=\"".esc_attr($cat_posts->post_title)."\">".esc_attr($cat_posts->post_title)."</a></p></li>\n";
                            $link_count++;
                        }
                    }
                }
            }
        }
    }

保存、リロードすると、全ての記事で関連記事がカテゴリベースで表示されるようになりました。
(もちろん関連記事を表示させる設定はしていません!)

related-post-category-after

2. 関連記事をタグベースで表示させる

次は関連記事をタグベースで表示させてみましょう。

タグベースで関連記事を表示させているのは、853行目付近にある以下のコードなので、、、
(「タグから取得する」というコメントが目印です)

    if ($link_count < 5) {

        // タグから取得する 
        $tag_relation = get_post_meta(get_the_ID(), 'tag_relation', true);
        if (isset($tag_relation) && $tag_relation == "y") {
            $target_tags= get_the_tags();
            if (isset($target_tags) && is_array($target_tags) && count($target_tags) > 0) {
                foreach ($target_tags as $tag_val) {
                    $tag_list[] = $tag_val->term_id;
                }
            }

            if (isset($tag_list) && count($tag_list) > 0) {
                query_posts(array('tag__in' => $tag_list, 'showposts' => 5, 'post__not_in' => array(get_the_ID())));
                if (have_posts()) : while(have_posts()) : the_post();
                    if ($link_count < 5) {
                        $image = (get_the_post_thumbnail(get_the_ID())) ? "<div class=\"related-thumb\"><a href=\"".get_permalink(get_the_ID())."\" title=\"".esc_html(get_the_title())."\" target=\"_blank\">".get_the_post_thumbnail(get_the_ID(), 'ss_thumb', array('class' => 'relation-image', 'alt' => esc_html(get_the_title())))."</a></div>" : "";
                        $relation .= "<li>".$image."<a href=\"".get_permalink()."\" title=\"".esc_html(get_the_title())."\">".esc_html(get_the_title())."</a></p></li>\n";
                        $link_count++;
                    }
                    endwhile;endif;
                }
            }
            wp_reset_query();
    }

このコードを以下のコードで置き換えます。
(&& $tag_relation == "y" を削除)

    if ($link_count < 5) {

        // タグから取得する 
        $tag_relation = get_post_meta(get_the_ID(), 'tag_relation', true);
        if (isset($tag_relation)) {
            $target_tags= get_the_tags();
            if (isset($target_tags) && is_array($target_tags) && count($target_tags) > 0) {
                foreach ($target_tags as $tag_val) {
                    $tag_list[] = $tag_val->term_id;
                }
            }

            if (isset($tag_list) && count($tag_list) > 0) {
                query_posts(array('tag__in' => $tag_list, 'showposts' => 5, 'post__not_in' => array(get_the_ID())));
                if (have_posts()) : while(have_posts()) : the_post();
                    if ($link_count < 5) {
                        $image = (get_the_post_thumbnail(get_the_ID())) ? "<div class=\"related-thumb\"><a href=\"".get_permalink(get_the_ID())."\" title=\"".esc_html(get_the_title())."\" target=\"_blank\">".get_the_post_thumbnail(get_the_ID(), 'ss_thumb', array('class' => 'relation-image', 'alt' => esc_html(get_the_title())))."</a></div>" : "";
                        $relation .= "<li>".$image."<a href=\"".get_permalink()."\" title=\"".esc_html(get_the_title())."\">".esc_html(get_the_title())."</a></p></li>\n";
                        $link_count++;
                    }
                    endwhile;endif;
                }
            }
            wp_reset_query();
    }

これで、どの記事にも関連記事がタグベースで表示されるようになりました。

related-post-tag-after