• サイドバーにプラグインを使わずに人気記事を表示したいです

    参考にしているサイトのソースにプラグインを使ってるようなコードがあったり、検索で多くのサイト様がプラグインを利用してらっしゃいます 

    このフォーラムの過去の質問にjetpackを利用して人気記事を表示させたりするものがりました

    なるべくプラグインを使いたくないので大まかにで良いので教えてほしいです

    現在、サイト内で記事ごとのアクセス数の集計は行っておりません

    出来れば教えてほしいこと

    ・コードで教えていただけると助かります
    ○○をやってから○○をやると良いみたいなのでもありがたいです
    出来れば参考サイトを教えてもらえると嬉しいです

    ・記事ごとのアクセス数を集計してそれを人気記事を反映させるコードに反映させる?であってますか?

    お願いします

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • 以前、違うケースでの回答ですが
    多分、これで大丈夫だと思います。

    私も、よく使っています。
    https://ja.forums.wordpress.org/topic/152825

    functions.phpに記入

    //アクセス数の取得(ファンクション)
    function get_post_views( $postID ) {
        $count_key = 'post_views_count';
        $count     = get_post_meta( $postID, $count_key, true );
        if ( $count == '' ) {
            delete_post_meta( $postID, $count_key );
            add_post_meta( $postID, $count_key, '0' );
    
            return "0 views";
        }
    
        return $count . '';
    }
    
    //アクセス数の保存
    function set_post_views( $postID ) {
        $count_key = 'post_views_count';
        $count     = get_post_meta( $postID, $count_key, true );
        if ( $count == '' ) {
            $count = 1;
            delete_post_meta( $postID, $count_key );
            add_post_meta( $postID, $count_key, '0' );
        } else {
            $count ++;
            update_post_meta( $postID, $count_key, $count );
        }
    }

    header.phpに記入
    (このソースがあるページのみ集計します。)
    <?php set_post_views( get_the_ID() );//アクセス数を取得 ?>

    書き込みたい場所に記入します。
    (サイドバーやインクルードなどPHPが使用できる場所ならOKです)

    <div>
      <h3 class="headline2">ランキング</h3>
      <ul>
    
      <?php
      $args = array(
      'numberposts' => 6,  //'posts_per_page' = 6> ,
      'post_type' 	=> array('post','page','カスタムポスト'), //投稿タイプの指定
      'meta_key'    => 'post_views_count',//ここでアクセスカウントを抽出
      'orderby'     => 'meta_value_num',//アクセス数の多い順
      'post_status' => 'publish',//公開した記事のみ
      'has_password' => false,//false or trueパスワードがかかってれば除外
      //'cat' => -1,//カテゴリーの設定
      );
      $customPosts = get_posts($args);
      foreach($customPosts as $post) : setup_postdata( $post );
      ?>
       <li>
        <a class="image" href="<?php the_permalink() ?>">
    	<?php if ( has_post_thumbnail()) { the_post_thumbnail('full'); } else { echo '<img src="'; bloginfo('template_url'); echo '/img/common/no_image1.gif" alt="" title="" />'; }; ?></a>
        <h4 class="title"><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h4>
       </li>
      <?php endforeach; //表示の抽出終了 ?>
      <?php wp_reset_query(); //データリセット ?>
      </ul>
     </div>

    仕組み的には、metaを使ってカスタムフィールドにアクセスした度に、1づつ加算し
    それをforeachで並び替えを行う感じです。

    以前、カテゴリー版を組んだのですが、苦労した割に微妙でした。

    トピック投稿者 sakuma

    (@sakuma)

    mura0403 さん

    ご回答ありがとうございます

    出来ました!

    私もプラグインを使わない方法で人気ページをランキングしたいと思っていました。
    実装したところ問題なく表示されプラグインを使っていた時よりも軽くなった印象です。

    良い点は多いのですが、この方法だと過去全てのアクセス数によるランキングとなりますよね?
    これだと新規投稿が不利=古いランキングとなりそうなので、週刊でのアクセス数で集計としたいと思います。

    週刊・月刊は、サイトによってベストは変わると思いますが
    限定した期間でのアクセスランキングが出来ればと思います。

    また、上記の限定した期間でのアクセス数も表示出来れば、嬉しいです。

    横から入って申し訳ありませんが、ご教授願いたいです。
    よろしくお願い致します。

    papasuさん

    そうなんですよね。
    delete_post_metaを使えば、定期的なリセットはかのうな気がするんですが
    いまいち、理想形ができなくて
    うまくカステムできてないんですよ。すみません。

    多分ですが,metaを使ってるので

    $count ++;
            update_post_meta( $postID, $count_key, $count );

    この辺に、日付の関数をかませばできそうなきがするのですが
    今度、時間見つけて考えてみますの。

    ご回答、どなたかご紹介頂けると非常に嬉しいです。

    mura0403様

    ありがとうございます。
    お時間のある時に考えて頂ければ、嬉しいです。

    当面は、データベース操作で「post_views_count」の数値を一定期間でリセットする方法で運用します。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「プラグインを使わずに人気記事をランキングで表示したいです」には新たに返信することはできません。