WPBeginnerの記事を下までスクロールしたことがある方なら、「今WPBeginnerで人気!」ウィジェットにお気づきでしょう。この機能は読者に好評で、私たちの最も価値のあるコンテンツを発見し、私たちのサイトをもっと探検するよう促しています。
WordPressブログの人気記事をハイライトすることで、読者が最高のコンテンツを見つけやすくなるだけでなく、サイトのエンゲージメント指標も高めることができます。訪問者は優れたコンテンツを得ることができ、サイトへの滞在時間も長くなるのです。
この記事では、WordPressで閲覧数に応じて人気の投稿を簡単に表示する方法を紹介します。
なぜWordPressで表示回数別に人気投稿を表示するのか?
ユーザーがWordPressブログの人気投稿を見れば、仲間の読者がどんなコンテンツを一番気に入っているかを知ることができます。そうすれば、それらの投稿をチェックし、会話に参加することができる。
さらに、WordPressで最も人気のあるコンテンツを表示することで、あなたの社会的証明を高めることができます。新規ユーザーに対して、”他のユーザーもこの投稿がとても役に立っているから、あなたもそうなるかもしれませんよ!”と伝えているようなものです。
最後に、トレンドのブログ投稿を表示することで、人々があなたのサイトに長く滞在し、ページビューを増やし、直帰率を減らすことができます。
ユーザー・エンゲージメントが高まれば高まるほど、Googleはあなたのコンテンツを良質で重要なものだと考えるようになります。その結果、WordPressのSEOが向上し、サイトが上位に表示されるようになります。
残念ながら、WordPressにはページビュー別に人気投稿を表示するビルトイン機能やブロックがありません。このガイドでは、プラグインとコードを使ってそれを実現する方法を紹介します。
以下のリンクをクリックすると、ご希望の方法にジャンプします:
方法1:MonsterInsightsでWordPressの人気投稿を閲覧数で表示する(推奨)
WordPressで人気投稿を表示する最も簡単な方法は、プラグインを使うことです。WordPressの人気投稿プラグインは実はたくさんありますが、私たちの意見では、MonsterInsightsがベストチョイスです。
世界中の300万以上のサイトで使用されているMonsterInsightsは、WordPressのための最高のGoogleアナリティクスプラグインです。主な機能はアナリティクスですが、人気の投稿を表示するユーザーフレンドリーな機能もあります。
まず最初に、MonsterInsightsプラグインをインストールし、Googleアナリティクスアカウントに接続する必要があります。詳しくは、初心者のためのWordPressにGoogleアナリティクスをインストールする方法のステップバイステップガイドをご覧ください。
注: MonsterInsightsには無料版もありますが、今回は人気投稿機能を含むPro版を使用します。
人気投稿ウィジェットの テーマを選ぶ
プラグインを有効化し、設定したら、WordPressダッシュボードからInsights ” Popular Postsに行く。そして、「Popular Posts Widget」メニュー項目をクリックします。
下にスクロールすると、人気投稿ウィジェットを表示するテーマを選択する必要があります。様々なオプション設定があります。
投稿にアイキャッチ画像を含むものもあれば、もっとミニマルなものもある。
テーマを選択する前に、そのテーマがどのようなものか確認したい場合は、ページ下の「テーマ・プレビュー」セクションに移動してください。
ワイドまたはナローのフォーマットでテーマをプレビューすることもできます。ワイドフォーマットでは、投稿がページや投稿コンテンツの下に表示され、ナローフォーマットでは、投稿がサイドバーのように右側に表示されます。
次に、「デザインのカスタマイザー」セクションまでスクロールダウンしてみましょう。ここでは、テーマの色、フォントサイズ、レイアウト、表示する投稿数を変更することができます。
カスタマイズのオプションは、使用するテーマによって異なります。本当に〜してもよいですか?
人気投稿ウィジェットの動作を設定する
テーマのデザインを設定したら、ビヘイビアセクションに移動しなければならない。ここで、人気投稿ウィジェットがWordPressサイトにどのように表示されるかをコントロールする。
ウィジェットスタイリング設定では、上記で作成したデザインを使用するか、ウィジェットのスタイルをすべて変更しないかを選択できます。2番目のオプションでは、ウィジェットはWordPressサイトのテーマのCSSに従います。
次に、ウィジェットが人気投稿を選択する方法を選択できます。このチュートリアルでは’Curated’を選択しますが、コメント数に基づいて最も人気のある投稿を表示することもできます。
次の作業は、「Googleアナリティクスから上位5投稿を追加」オプションを有効化することです。しかし、その前にMonsterInsights Dimensions Add-Onと新規カスタムディメンションとして投稿タイプを追加する必要があります。
これにより、MonsterInsightsはGoogleアナリティクスのデータに基づいて最も人気のある投稿を選択することができます。
そのためには、MonsterInsights Dimensionsアドオンをダウンロードし、WordPressにプラグインとしてインストールする必要があります。ステップバイステップの手順については、WordPressプラグインのインストール方法をご覧ください。
次に、Insights “ Settingsに 行き、’Conversions’タブに切り替える。その後、「Add New Custom Dimension」をクリックする。
そうしたら、ドロップダウンメニューから「投稿タイプ」を選択します。
これにより、MonsterInsightsがブログ投稿やその他のカスタム投稿タイプのパフォーマンスを追跡することが有効化されます。
インサイト ” 人気投稿“に戻り、”人気投稿ウィジェット “にアクセスする。
Google アナリティクスから上位5投稿を追加する」トグルボタンを有効化するだけです。その後、’Test Automated Posts’をクリックし、設定が成功したかどうかを確認します。
Yesの場合、成功メッセージがポップアップ表示されます。
人気投稿データが正しく取得されています。ご注意:カスタムディメンションの設定時期によっては、Google アナリティクスから関連する Popular Posts のデータが読み込まれるまで最大 7 日かかる場合があります。
次のステップに進み、ウィジェットの上に表示されるタイトルを追加します。Check Out Our Most Popular Posts’などのようなものでもかまいません。
その下に、ウィジェットをすべての投稿タイプに表示するか、特定の投稿から除外するか、特定の投稿カテゴリーだけに表示するかを選択できます。
これらの設定は、ブログ投稿以外のカスタム投稿タイプを作成していて、人気投稿ウィジェットが無関係に見えると感じる場合に便利です。
最後のステップは、人気投稿ウィジェットを埋め込むことです。自動的に設置する、Gutenbergブロックを使う、サイドバーウィジェットとして追加する、ショートコードを使うなど、いくつかのオプションがあります。
オプションを一つずつ見ていこう。
人気投稿ウィジェットを自動的に埋め込む
過去のBehavior設定に一致する投稿日: すべてにウィジェットを表示したい場合は、Automatic Placementをお勧めします。
そのためには、「自動配置」ボタンを有効化するだけでよい。
このオプションの欠点は、投稿日やページに最適なウィジェットのデザインを調整できないことです。このタイプの機能が必要なら、次の方法を試してください。
人気投稿ブロックをページや投稿に埋め込む
ウィジェットがページや投稿日にどのように見えるかをもっとコントロールしたい場合、この方法が適しています。
まず、ウィジェットを設置したい投稿またはページのブロックエディターに行きます。その後、エディター内の任意の場所で「+」ブロック追加ボタンをクリックし、「Popular Posts」ブロックを探します。
ブロック設定パネルには、ウィジェットのテーマ、フォントサイズ、色、タイトル、レイアウト、投稿数を変更するオプションがあります。
これらの設定は、MonsterInsightsプラグインで見たものと似ている。
唯一の違いは、ウィジェットで選択される投稿を変更できないことです。
とはいえ、「動作設定」では、特定のカテゴリーからの投稿だけを表示することも可能です。こうすることで、人気投稿の選択肢をよりニーズに合わせたものにすることができます。
ブロックの設定に満足したら、投稿エディターとページエディターで「更新」ボタンをクリックするだけです。
テストサイトでの「人気投稿」ブロックはこんな感じです:
人気投稿ウィジェットをサイドバーに埋め込む
ウィジェット対応のサイドバーエリアがある非ブロックWordPressテーマを使用している場合、そこにPopular Postsウィジェットを追加することができる。これは、WordPressサイドバーにおすすめ投稿を追加する方法のカテゴリー:で行ったことである。
すべて外観 ” ウィジェットにアクセスするだけです。そして、サイドバーエリアの「+」ウィジェット追加ボタンをクリックし、「人気投稿 – MonsterInsights」ウィジェットを探してください。
前の方法と同様に、ウィジェットにはテーマの外観をカスタマイズするための同様の設定が含まれています。
何が違うかというと、インターフェースが若干トリッキーになっていることだ。設定を変更しても、ウィジェットが実際にどのように見えるかを見ることはできません。プレビューするには、別のウィジェットまたは別のエリアをクリックする必要があります。
ウィジェットの外観に問題がなければ、右上の「更新」をクリックしてください。
サイドバーが正しく見えるかどうか、あなたのサイトで確認してください。
私たちのはこんな感じだ:
Popular Postsウィジェットを特定のページにのみ表示させたい場合は、WordPressの特定のページでウィジェットを表示または非表示にする方法のガイドをご覧ください。
ショートコードで人気投稿ウィジェットを埋め込む
最後のオプションは、ショートコードを使用することです。この方法は、上記のオプションがあなたの特定のユースケースで機能しない場合に推奨されます。
Popular Posts Widgetタブで、「Embed Options」セクションまですべてスクロールダウンします。次に、「ショートコードを使用して表示」を選択し、「ショートコードをコピー」ボタンをクリックします。
その後、好きな場所にショートコードを配置するだけです。詳しくは、WordPressでショートコードを追加する方法をご覧ください。
方法2:WordPressの人気投稿をコードで表示する(より高度な方法)
MonsterInsightsの方法は、WordPressで最も人気のあるベストコンテンツを表示する最も簡単な方法です。しかし、もしあなたがコーディングに慣れているのであれば、WordPressで最も人気のある投稿を表示するためにコードを使用することもできます。
この方法では、WPCodeのようなコード・スニペット・プラグインを使用することをお勧めします。
WPCodeを使えば、WordPressファイルに直接触れることなくカスタムコードを安全に挿入することができます。さらに、この方法では複数のコードスニペットを使用する必要があるため、プラグインを使用すると、それらのすべての管理とトラッキングがはるかに容易になります。
まず、WordPressにWPCodeをインストールする必要がある。WPCodeには無料版もありますが、ここではPro版を使用します。正しい位置にコードを挿入するために必要な機能が備わっているからです。
ステップバイステップのインストールガイドについては、WordPressプラグインのインストール方法の投稿をお読みください。
WordPress投稿表示カウンター機能の追加
プラグインを有効化したら、ダッシュボードからCode Snippets ” + Add Snippetに 行く必要があります。次に、「カスタムコードの追加(新規スニペット)」にマウスオーバーし、「+ カスタムスニペットの追加」をクリックします。
これで、WPCodeコード・スニペット・エディターに入りました。コードを挿入する前に、スニペットのタイトルを追加してください。
この最初のコードには、「WordPress Post Views Counter Function」のような名前を付けることができます。なぜなら、この最初のコードの目的は、WordPressの投稿表示数をカウントする関数を作成することだからです。
次に、コードタイプを「PHPスニペット」に変更する。この投稿から追加しなければならないコード・スニペットはすべてPHPであることに注意してください。
その後、以下のコードをコピー&ペーストしてください:
function wpb_set_post_views($postID) {
$count_key = 'wpb_post_views_count';
$count = get_post_meta($postID, $count_key, true);
if($count==''){
$count = 0;
delete_post_meta($postID, $count_key);
add_post_meta($postID, $count_key, '0');
}else{
$count++;
update_post_meta($postID, $count_key, $count);
}
}
//Get rid of prefetching to keep the count accurate
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);
あとは「インサーター」セクションまでスクロールダウンし、挿入方法に「Auto Insert」、場所に「Run Everywhere」を選択するだけです。これはテーマのfunctions.phpファイルにコードを挿入するのと同じです。
その後、ページの右上に移動し、コードを有効化する。
そして、「スニペットを保存」をクリックする。
この段階で、別の新しいカスタムコードスニペットを追加する必要があります。これは「Track Post Views Function Call」と名付けることができます。
このコードは上記の関数を呼び出し、個別投稿ページで有効化します。
wpb_set_post_views(get_the_ID());
このコード・スニペットで異なるのは、個別投稿ページで実行することを想定しているため、「Insert After Post」の場所を選択することです。
完了したら、コードを有効化して保存する。
WordPress投稿表示トラッキングフックの挿入
ここで、現在のページが個別投稿かどうかをチェックする新しいコード・スニペットを追加する必要があります。もしそうなら、投稿の表示回数を追跡して更新するためにWordPressの投稿表示カウンター関数を呼び出します。
こうすることで、ユーザーが投稿にアクセスするたびに表示回数が更新される。
このスニペットを「WordPress Post Views Tracking Hook」と名付けよう。そして、以下のコード行を挿入する:
function wpb_track_post_views ($post_id) {
if ( !is_single() ) return;
if ( empty ( $post_id) ) {
global $post;
$post_id = $post->ID;
}
wpb_set_post_views($post_id);
}
add_action( 'wp_head', 'wpb_track_post_views');
インサート方法は「自動インサート」、場所は「フロントエンドのみ」を選択できる。
前のステップと同じように、コードを有効化してスニペットを保存するだけです。
注: キャッシュプラグインを使用している場合、このテクニックは初期設定では動作しない可能性があります。W3 Total Cacheのようなキャッシュ・プラグインが提供するフラグメント・キャッシング機能を使えばうまくいくかもしれません。
投稿の表示回数を取得し、最も人気のある投稿を表示する関数を追加。
このガイドの最終段階に入った。WordPressの投稿の表示回数を取得してフォーマットするコード・スニペットを追加する必要があります。これは後で最も閲覧された投稿のリストを表示するときに便利です。
このコードを「投稿表示回数取得関数」と名付け、場所を「どこでも実行」に設定します。
以下はそのコード・スニペットである:
function wpb_get_post_views($postID){
$count_key = 'wpb_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 View";
}
return $count.' Views';
}
この場合も、WPCodeでコードを有効化してから保存してください。
それができたら、また新しいコード・スニペットを作成し、名前を「Display Most Popular Posts with View Counts」とします。これは、ブログ投稿の一番下に人気投稿を表示するコードです。
コード・プレビュー・ボックスに、以下のスニペットを挿入する:
// Customize the query parameters as needed
$popularpost = new WP_Query( array(
'posts_per_page' => 3, // Feel free to adjust the number of posts to display
'meta_key' => 'wpb_post_views_count',
'orderby' => 'meta_value_num',
'order' => 'DESC'
));
?>
<div class="popular-posts">
<h2>See Our Most Popular Posts</h2> <!-- Feel free to customize the title -->
<ul>
<?php while ( $popularpost->have_posts() ) : $popularpost->the_post(); ?>
<li>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
- <?php echo wpb_get_post_views(get_the_ID()); ?>
</li>
<?php endwhile; ?>
</ul>
</div>
<?php wp_reset_postdata();
コードにあるように、表示する投稿数を自由に調整し、このセクションのタイトルをカスタマイズしてください。
WPCode Insertionセクションで、Locationに’Insert After Post’を選択してください。そして、コードを有効化してスニペットを保存します。
あとはすべて、あなたのブログの投稿を訪問し、コードが機能するかどうかを確認するだけです。以下は、私たちのテストWordPressブログで、表示セクション別に最も人気のある投稿がどのように見えるかです:
専門家のアドバイス:コードをさらにカスタマイズしたいが、コーディングの経験がない場合は、WPCodeのAIコードジェネレータをご利用ください。この機能は、あなたの正確なニーズに合わせて既存のコードを編集することができます。
詳しくは、WPCodeのレビューをご覧ください。
動画チュートリアル
視覚的な説明がお好きな方は、以下のビデオ版チュートリアルをご覧ください:
このWordPressチュートリアルで、人気記事を閲覧数別に表示する方法を学んでいただけたでしょうか。また、WordPressの専門家が選ぶ最高の関連記事プラグインや、コンバージョン率の高いランディングページとは何かについての記事もご覧ください。
If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Facebook.
Bigdragon13th
Hello,
I’ve using this code for months and it’s work greats! That’s until I start using W3 Total Cache and this code stop count views for me.
I’m struck at where do I need to put the mfunc to let the code work with cache. Can you point that out?
FYI, I put all the code in a site-specific plugin.
AJ
Hell this is great! How would I display the view count outside of the post loop like in the sidebar?
leslie
hello, I have some problem on how setting up like when the login user won’t include on the count while viewing any pages?? how to do that.. please need some help on these. thanks
Sarah
Hey there, thanks for this. REALLY helpful!! Would you know how to apply a time range to this code? For example to show the most popular posts in the last day, week or month etc? I know there are plugins for this but I would like to do it without one
Dale Knight
Great!
Denis
Hello,
thanks for this nice tutorial. It works on my page!
– how can I exclude robots and spiders that hit my posts?
– May be I can set a timer of 10 seconds. after that the count should rise. So the people who only click thourgh the posts are not counted.
Cheers,
Denis
Sarah
You have no idea how much time you saved me. Thank you, works perfectly!
Clay Hickman
Thanks for the tip. Will use.
Jenni B
Hello – thanks so much for this! I noticed the question regarding the W3TC workaround, but have a slightly different question: does that still apply if I’m hooking into wp_head from functions.php, and if so, how exactly do I implement it there? Thank you!
rafi
this is really easy and very helpful! thanks man!
Kosmos
Hello, thanks for this snippet.
I have a problem, the orderby don’t work. I have five posts :
– Post 1 : 85 views
– Post 2 : 35 views
– Post 3 : 165 views
– Post 4 : 1 view
– Post 5 : 1 view
When i displayed it the order was : 1, 2, 4, 5 and 3
Do you have an idea please ?
Raj
It might be integer type issue ..
Iftekhar
following your article I am using post view count in my site since 6 months. It was working fine, but recently I am having problem with this. If a visitor view a post the count is increasing by 1 but the problem is the count is increasing in all other posts. I have w3 total installed and I m using mfunc according to your article. Please help me if you have any idea about this issue… Thanks.
WPBeginner Support
Iftekhar can you check what happens when you turn off w3 total cache?
管理者
Iftekhar
The problem seems to w3. Post view count is OK since deactivated. But I want to use both of them
ivan
Hello,
I am wanting to switch from using the plugin because it doesn’t support the polylang language (the author’s not getting back to me and I don’t really know if it’s possible to filter functions for the plugin..)
Two questions:
– I examined the code a bit and I’m not sure if this code starts counting posts from when it’s implemented? Or does it somehow retrieve where the post counts are currently?
– The current code on this website uses the get_posts() function so it creates an args array instead of using WP_Query(). Is this the same thing? I’m guessing not. And if it isn’t is the code below correct to get the array? I tried implementing this but it didn’t seem to work.
$args = array( ‘meta_key’ => ‘wpb_post_views_count’, ‘orderby’ => ‘meta_value_num’, ‘order’ => ‘DESC’,’numberposts’ => 6, ‘post_status’=>”publish”,’post_type’=>”post”,’lang’ => ‘en’);
thanks!
Tomas
This approach is very basic. If you want to count clicks from the same user (same IP) only every 5 minutes or 10 minutes etc. you need to have a separate table for that and before adding a new row in db you need to check the ip and time. If there is a record saved 3 minutes ago, the click is not added. Otherwise, it is added. Also this aproach allows you to create custom list of most viewed articles in 7 dyas, month, all time etc. Or even by category, user etc. (if you store appropriate values in appropriate table columns.
boson
i am trying .. when you say put code wpb_set_post_views(get_the_ID()); inside of single post loop, does that mean use this code inside of the theme single.php anywhere?
thank you for your help
WPBeginner Support
No it means paste the code inside the loop between
1-click Use in WordPress
and
1-click Use in WordPress
管理者
Cory Dobson
Is there a way of restricting when the post views are collected from? For example, I am looking to display the posts with the most views in the last 24 hours, how would you do something like that using this code?
Great post by the way, really helpful!
igor
how can I paginate the results.
10 results by page lets say
Mark
What if your single-xxxx.php doesn’t use the loop but custom fields. How can I use this code if I don’t use the loop?
WPBeginner Support
single-xyz.php means that file is used for a single post with xyz slug. You can still add the last code snippet in your template just where you think that the template ends displaying content.
管理者
quocminh86
comment policy,
Dusan
I’m confused as to where to put the mfunc code?
WPBeginner Support
If you are using W3 Total Cache then you can add this code just before wpb_get_post_views(get_the_ID()); in your templates where you want to display the popular posts. The purpose of this code is to allow W3 Total Cache to dynamically display popular posts and not cache it.
管理者
Waqas Munir
Dear, i am really confused about that… I am trying to add this to my blog, but I have no experience in all this.
WPBeginner Support
Then perhaps you should try using WordPress Popular Posts plugin instead.
管理者
Aleksander
What about using update_post_meta function instead of delete_post_meta and add_post_meta ?
George
Thanks for this post! Really really good.
I’ve two question:
1. Is there any possibility to count just one visit for each IP adress? How?.
2. Can i show the most popular posts by a specific period of time? For example, most visited posts this month, or the most popular posts from 1 of may to 1 of june…
Thank you!
Igor Gumush
thanks , working great
shishir umrao
Hi,
This code is working but whenever i reload the page , it is adding “2” to the total page count. For example if page count is 14 and after reloading total page count is 16 … can anyone guess where’s the problem ?
Shishir Umrao
Editorial Staff
Its happening because the function is loading twice somehow.
管理者
shishir umrao
Yeah. I figured out this piece of code was responsible for this.
Nick
Very useful post, I managed to make my Tag pages to order posts by a custom field value similar to post view count, however, I ave pagination on my tag pages and it keeps showing the same top ranking posts on all pages, even after I have removed this code:
‘posts_per_page’ => 4,
How do I fix the pagination so it show other posts on subsequent Tag pages?
Chris
How did you manage to make your Tag pages order posts by a custom field value similar to post view count?
It looks like the popular posts plugin only takes categories as a parameter.
Mike
Thanks for the very detailed instructions. Will using this to display the most popular posts cause a lot of additional server load if a site has significant traffic? Some of the WP plugins for this sort of thing tend to have this problem.
Editorial Staff
How much is significant traffic? We’re using it on WPBeginner.
管理者
Ryan Karpeles
Uh, awesome! Just awesome. THANK YOU for this!!! Works perfectly!
Lowell
I’m still learning this stuff so pardon my ignorance.
How do you allow the user to choose between queries like they do on codecanyon when they allow you to sort by price, sales, date etc.?
Thanks so much.
saeed
How can I change number of popular posts that display?
Editorial Staff
Change the posts_per_page to whatever number you like.
管理者
Adam Davies
Thank you so much for this. Life saver and a great tip that I definitely will be using more often.
Md. Ariful Islam
Hey, Really , Many Many thanks for this useful tips. I am highly glad to you.
Ar Ya
Hi , that’s great !
But ‘orderby’ => ‘wpb_post_views_count meta_value_num’ not working.
please use : ‘orderby’ => ‘meta_value_num’
thnx
nick
Thanks, it works for me, just with one important exception – popular posts are not as links, just their titles. How can I fix this, please?
Preston
I added this code in the manner described in the article and upon activation, I saw this….
The plugin generated 2 characters of unexpected output during activation. If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or removing this plugin.
Preston
Fixed. I did two things:
1. Switched my permalink structure to a custom structure /%category%/%postname%/
2. Check through all of my pages for extra spaces.
One of them worked.
…go figure
Preston
Jose Vega
Hi, I think it´s necesary add – wp_reset_query(); – at the end of the query to destroys the previous query used on a custom Loop.
I hope It helps somebody.
Jon Edwards
I have this working to 95% using a custom WP Query to display popular posts from each category.
The only bit not working for me is the order – mine won’t display in descending order of views.
Cameron
Thanks for the post! This really helped.
I’m not sure if anyone else ran into this issue, but when you set up the arguments for WP_Query, you have orderby => ‘wpb_post_views_count’. This was a problem for me because I wasn’t sure how it was ordering my posts. In the codex it says that if your using numbers they will only sort by the first digit. To fix this, you can simply replace the ‘wpb_post_views_count’ with ‘meta_value_num’. This basically will tell the query to reach inside the post’s meta value and probably cast it to an integer before it sorts. Hope this helps anyone running into the same issues.
Overall, it works great! I have the 4 most popular posts in a slider on the home page. Thanks again!
Editorial Staff
Good suggestion. Updated the article with this.
管理者
efishinsea
Hi. Your code sample up top is *not * updated.
Instead of this:
‘orderby’ => ‘wpb_post_views_count meta_value_num’
you should have this as suggested :
‘orderby’ => ‘meta_value_num’
if you want to sort by “Most to Least”
Minh
Why it only shows posts which have count view < 100?
Editorial Staff
If you are using a caching plugin, then it doesn’t always update.
管理者
George
Thanks for the tutorial. How do you exclude current posts from displaying?
Kris
This looks great on my home page but it seem to want to display on my single.php or anywhere else on my site. I tried creating a sidebar-single.php and inserting the code but still no luck. Any idea why it wouldn’t work on other areas my theme?
Kris
i got it working. Thanks for this.
Anderson
Dont work, its show randomic posts :S and i use post_type = > ‘post-type-name’
Mody
This usually happens when meta key wpb_post_views_count is not available for posts, make sure you add the function that tracks views within wp while loop, otherwise it will keep showing random posts.
– Mody
Bent
Hello,
I’m using your code for track post view in the wordpress theme.
function wpb_get_post_views($postID){
$count_key = ‘wpb_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 View”;
}
return $count.’ Views’;
}
The problem is that when I use W3 Total Cache the track view is not working right.
Is there a way in the W3 Total Cache’s Options to put ignore only on this function, but in the same time I want the code to work with W3 Total Cache?
Thank you!
Editorial Staff
Read the article again. We have already covered this “Fragmented Caching”.
Vaibhav
Hello
i followed your tutorials and have done exactly what u said.
i also added ur snippet
php query_posts(‘meta_key=post_views_count&orderby=meta_value_num&order=DESC’);
in index.php
i am facing a little error,
i am using infinite scrolling
when i put this snippet in index.php
the infinite scroll instead of loading next set of post
loads the same sets of post
For better Understanding u can check it live here
blog.newgags,com
Henry
For some reason my post views are incrementing by 2 on each page refresh. What could be happening there?
Henry
I do apologise. I had added the tracker to both the WP header and also to the single post body. Very stupid on my part :}
Nice tutorial, very easy to follow.
Brandon
First of all thanks for this post. Second I have been using this script for a few days now and for some reason it started out fine and now it is not displaying the most viewed posts, I don’t see any rhyme or reason to what posts are now being displayed. The last I checked the post that it is displaying at the top has 8 page views. I know there are posts with 25+ recorded page views. I would like to figure this out. Can you possibly point me in the right direction. I followed this post word for word. The post views are being recorded properly.
Editorial Staff
Not sure what could be going wrong. The WP_Query is suppose to list the posts with the highest counts first.
管理者
Einar Ólafsson
Hi. This works grade up until the view count gets over 999. All post with more view counts than 999 are not displayed, the query never post them. The latest post is the one with exactly 999 and the rest are under that. I have over 100 post that have more than thousand and are not being included.
Editorial Staff
Interesting. We have posts with over 10k views and it seems to be working just fine.
管理者
Martinbeasnunez
Guys you rockkk
Quick question:
If i have add a custom post type in your code ?
(popular post from especific custom post type)
Regards (:
Editorial Staff
This should work with CPTs as well.
管理者
Artem Russakovskii
This is a good basic tutorial, but be warned: it’s not going to work if you use caching strategies that bypass PHP (like wp-supercache, W3TC, nginx/varnish, etc). The only way to count those would be via Javascript or log parsing.
Editorial Staff
Hey Artem, Thanks for dropping by. Actually using W3 Total Cache, you can use fragment caching and it works just fine. Going to update the article for those who are using the caching plugin.
管理者
Artem Russakovskii
Interesting. However, I run nginx in front of W3TC, and it does a whole lot of its own caching, so it’s always safer/more reliable to use an AJAX approach. Nice info on the fragment caching though, I had no idea W3TC had it.
Ramon Fincken
Why use
//To keep the count accurate, lets get rid of prefetching
remove_action( ‘wp_head’, ‘adjacent_posts_rel_link_wp_head’, 10, 0); ?
if you can use the main loop or the footer ?
Editorial Staff
Some browsers prefetch the rel links with the next value. So technically when a user views one post, it can act as if they had viewed both posts. This will cause inaccurate count. If you like inflated views, then don’t take it off.
管理者
Nino Blasco
Great article! Explanation useful and easy to understand.
Thank you.
Connor Crosby
Yay! A tutorial that doesn’t require a plugin!
Editorial Staff
Yeah we try to balance things out for our audience. This was requested by the users, and we were using it on our own site.
管理者
Zach
Please stop saying stuff like this. Plugins aren’t bad, it’s articles like this that make them look bad. Enough articles have come out over the past few weeks to fully explain this – it’s getting a little embarrassing.
Editorial Staff
How would you suggest titling future posts instead? DIY prefix? These are different then just using a pre-made plugin. Also, if you read the article, there is no where in our article that we say “plugins are bad”. We clearly state that the only reason why coded this was to get more customization. It is up to a user to take either stance. Some can think that plugins are bad… whereas others like yourself can think that we are saying that plugins are bad…
Zach
I don’t think any type of prefix is needed. It’s one of the great/scary things about WordPress. You COULD put this code in your theme, but then begs the argument about needing to either, 1) Loose those customizations when you change your theme, or 2) have the knowledge to properly pull those over to another theme.
A lot of the users here are beginners (hence the point of this site), so many will just copy/paste what you give them. WP Beginner is obviously a fantastic resource (reason why I follow you on Twitter), but you have a responsibility to not put a false notion about how plugins/themes work.
Correct, you don’t flat out say, “Plugins are bad, put this in your theme instead!”, but the original commenter to the thread I replied to, said, “Yay! A tutorial that doesn’t require a plugin!” – so even though you didn’t say it, that’s how it was taken.
I’d suggest doing was Pippin does for his plugins – he has a simple starter plugin he uses for all of his tutorials. Why not create a blank “Starter Plugin” download, with just the basics, so others can download and put their customizations in there instead? Reference it in each article you do and it takes out some of the confusion. Thanks.
Editorial Staff
We have been following Otto’s advice on site-specific plugin for quite some time. It is probably similar to what Pippin does. If you read this article, site-specific plugin is hyperlinked. It is in most other articles as well. That article shows users the importance of site-specific plugin and advise users to not put everything in functions.php file. At the bottom of that article, the sample “starter plugin” is there for anyone to start with.
codekipple
In fairness this tutorial helped me out. I wanted a simple solution for popular posts after trying some of the plugins and not being able to fully control the markup. This tutorial helped me quickly implement some popular posts functionality into my own plugin.
So i agree that using pre-built plugins is not a bad thing, but at times tutorials like this are useful to take control and build out a plugin that works the way you need it to instead of fighting against an already built plugin.
Pippin
As Zach said, please stop using “without a plugin”. Sure, it’s cool to see how to code this yourself but there is literally no difference between this code and the code in a plugin. You could place this code into a plugin and it would function identically to placing it in your theme.
Ruben
If you say there’s no difference, you have no idea what you’re talking about. Lets say your are working on a site and don’t have access to the plugins directory, making a solution that works “without using a plugin” would be a viable alternative.
As for the title, semantically the title should reflect the content of the post and could be “How to Display Popular Posts by Views in WordPress with or without a Plugin”.
However, taking SEO in to consideration, lets say he would like this post to reach a specific audience, for example, people who don’t want to or can’t use a plugin, the title would probably be best as is.
Gautam Doddamani
i am using genesis child theme..can u tell me which all functions and codes to use..i am sorry i am a noob to genesis…
Editorial Staff
For child theme users, the wp_head solution would work to track post views. Not sure what else you meant.
管理者
Gautam Doddamani
is it true? as artim told, does this code become unresponsive when we use a caching plugin?? for example i currently use W3 total cache and i want to use this method to build my custom popular post by views widget…i read this kind of post on wpsnipp.com and the users suggested it does not work when we enable caching plugins…reply soon…
Editorial Staff
Read the comment reply to Artem. You can use fragment caching to make it work just fine.