WordPressテーマSANGOの質問

人気記事ウィジェットで一部の記事を計測から除外する方

アバター
須藤真人

サルワカさんのおしゃれなサイトにあこがれて、lightningから移行しました!

早速ですみませんが教えて下さい。
今までは、サイトの紹介ページをターゲットごとに書き分けて、固定ページの親子機能を使って階層構造にして作成していたのですが、SANGOに切り替えてから親のページに子のページが表示されなくなってしまいました。
どのような設定をすれば、表示できますでしょうか?
よろしくお願いいたします。

↓当該のページです↓
https://trackonsnow.jp/introduction-of-this-website/
以前はこのページに子のページのリンクが3つ表示されていました。

今は暫定的に、投稿ページを使って階層構造にしていますが、
サイトの紹介が、人気記事ランキングに入ったりすると厄介なので、固定ページで作りたい、というのが主旨です。

他テーマからSANGOに移行される方へ(作成中)
コメントへの回答
サルワカくん
サルワカくん
2018/08/09

お世話になっております。
恐縮ながらSANGOでは、固定ページに子固定ページへのリンクが自動的に表示される仕様にはなっておらず・・・。
関連記事ショートコードを使って、子固定ページへのリンクを表示させるのが手軽かと思うのですが、いかがでしょうか。

アバター
須藤真人
2018/08/09

そうなんですかー…。残念ですがわかりました!
代替提案ありがとうございます。ですが、イメージ的には自分で作った暫定仕様の方がイメージに近くできそうですので、それをもうちょっと頑張ってカスタマイズしてみます。

ひとつ問題が残っているので、引き続き質問いいですか?

投稿で紹介ページを作ると、ウィジェットの「人気の記事」の上位を、アクセスが集中しやすい「サイトの紹介ページ「」が占有してしまう可能性があり、そうなるとちょっと困ってしまいます。
特定の記事を、人気の記事の集計対象から除外する良い方法は何かありますでしょうか?

サルワカくん
サルワカくん
2018/08/09

【2020/03/03 更新:最新バージョンに対応しました】
人気記事ウィジェットで一部の記事を計測から除外する方法ですが、子テーマにparts/single/entry-footer.phpを複製して(partsフォルダーを作り、その中にsingleフォルダーを作り、さらにその中にentry-footer.phpを作成します)

if( !is_bot() && !is_user_logged_in() ) {
  sng_set_post_views(get_the_ID());
}

の部分を

if( !is_bot() && !is_user_logged_in() && !is_single('99')) {
  sng_set_post_views(get_the_ID());
}

などと書き換えると、特定の記事をカウントから除外できます(99の数字のところを除外したい投稿のIDにします)。

アバター
須藤真人
2018/08/14

今度こそできました!
大変助かりました。
ありがとうございます!!!m(_ _)m

勉強不足ですみませんでした。
サルワカさんのサイトと、おすすめの本で勉強するようにします!

アバター
須藤真人
2018/08/13

度々すみません。
やってみたのですが、対象の記事がカウントから除外されない様で、再度教えてください。

まず、書き換える様ご教示下さったコードについてなのですが、元々footer.phpには無く、single.phpにありました。

footer.phpとsingle.php、両方を子テーマに複製し、片方づつコード追記と書き換えを試してみましたが、カウントが除外されないようなのです。

質問としては、下記の3点です。
・コードを書き込むファイルはfooterとsingleどちらでしょうか。
・コードを書き込む位置で気を付けるべきことはありますか。
・ほとんどコピペさせて頂いているので大丈夫かと思っているのですが、下記のコードに誤りはありますか?
if( !is_bot() && !is_user_logged_in() && !is_single(‘678’, ”687)) {
sng_set_post_views(get_the_ID());
}

よろしくお願いいたします。

アバター
須藤真人
2018/08/11

わかりました!
これでイメージに近いサイトにできそうです。
ご丁寧にお教えくださりありがとうございました^^

サルワカくん
サルワカくん
2018/08/14

こちらこそ誤った案内をしてしまい、すみませんでした。
なんにせよ、うまくいったようで安心しました!

サルワカくん
サルワカくん
2018/08/13

【追記】最新バージョンではparts/single/entry-footer.phpにかかれています

申し訳ないです。single.phpが正しいです。footer.phpは誤りなので、該当のファイルもしくはコードは消していただくようお願いします。
(追記するとダブルカウントされるのでコードを修正してください)

コードに誤りありです。
ダブルクオテーションが閉じておりません。
また、複数指定するときには配列(array)にする必要があります(この記事を読めば分かると思います)。
なので

if( !is_bot() && !is_user_logged_in() && !is_single(array('678','687'))) {
sng_set_post_views(get_the_ID());
}

ですかね。

アバター
たごさく
2020/06/13

下記の回答を参考にしましたが、解決できません。

人気記事ウィジェットで一部の記事を計測から除外する方法
https://saruwakakun.com/sango/comments?id=2346#comment-2363

子テーマにparts/single/entry-footer.phpを複製して

if( !is_bot() && !is_user_logged_in() ) {
sng_set_post_views(get_the_ID());
}

の部分を

if( !is_bot() && !is_user_logged_in() && !is_single(‘8’)) {
sng_set_post_views(get_the_ID());
}

に変更しました。

除外されるまでには時間がかかるのでしょうか?
ご回答よろしくお願いいたします。

サルワカくん
サルワカくん
2020/06/13

お世話になっております。
上記のページの方法では、計測を停止する形なので、すでにランキングに入るだけのPV数がある場合には除外されません。

次回のアップデート(おそらくSANGO v2.0.6)にて、以下のようなコードを子テーマのfunctions.phpに記入することで、ランキングから特定の記事を除外できるようにします。

  function sng_get_popular_posts($num = 6) {
    return get_posts(array(
      'post_type' => 'any',
      'numberposts' => $num,
      'meta_key' => 'post_views_count',
      'orderby' => 'meta_value_num',
      'order' => 'DESC',
      'exclude' => '15, 25' // ランキングから除外する投稿ID
    ));
  }

↑いちばん下のexcludeの部分に除外する投稿IDを半角カンマ区切りで指定します。この例だとIDが「15」と「25」の投稿がランキングから除外されます。


v2.0.5以下をご利用の場合の対応方法

親テーマのlibrary => functions => widget-settings.phpを開きます。
150行目あたりに以下のようなコードがあると思います。

$posts = get_posts(array(
      'post_type' => 'any',
      'numberposts' => $entry_num,
      'meta_key' => 'post_views_count',
      'orderby' => 'meta_value_num',
      'order' => 'DESC',
    ));

ここに、以下のようにexcludeの行を追加します。

$posts = get_posts(array(
      'post_type' => 'any',
      'numberposts' => $entry_num,
      'meta_key' => 'post_views_count',
      'orderby' => 'meta_value_num',
      'order' => 'DESC',
      'exclude' => '15, 25' // ランキングから除外する投稿ID
    ));

なお、親テーマを直接編集するわけなので、次回のアップデートにて上書きされます。
その際には、上述のコードを子テーマのfunctions.phpに貼り付けていただければと思います。

よろしくお願いします。

アバター
たごさく
2020/06/16

丁寧にご解説いただきありがとうございました。
人気記事から除外することができました。

次回のアップデートでの記述のご説明も了解しました。
今後もSANGO長く利用させていただきます!