機能 ショートカットキー
リファレンス(参考URL)一覧へ移動 R
記事URLをMarkDownとしてコピー Ctrl+M
前のコードタグへ移動 Ctrl+←
次のコードタグへ移動 Ctrl+→
ヘルプを表示・非表示 H
Tips
- ショートカットキーは記事上で有効です。ヘッダー/フッター付近では機能しないことがあります。
- コードタグ移動機能がうまく動かないときは、Shift+F5でページを更新してみてください。
- このウィンドウを閉じるには、Hキーをもう一度押してください

WordPress 見せたくない・隠したい記事をPHPでどうにかする

プログラミング

僕の状況

プログラミング

僕のブログの一つで、最近はじめたものがあって、それが、結構ディープなことを書いています。
批評系だったり、アダルチックなことだったり、日常のことだったり、様々です。
で、まぁまず、そういう記事っていうのはやはり、いきなり一般に見せちゃいけないと思うんです。

じゃあどうするかって、例えば、”本当にこの記事を閲覧しますか?気分を害する恐れがあります”みたいなポップアップを出すとか、
記事一覧から該当する記事を隠すとか、でも完璧に見れないんじゃだめだから、クエリパラメータで見れるようにするとか、
そういう記事は見せないだけじゃなくてGoogle評価も下げかねないので、noindexにするとか、ね。

そういう機能を、ここでは実装していきます。

記事一覧から隠れた記事の記事カテゴリの設定をURLクエリパラメータによって無効化

プログラミング

functions.php


function exclude_category_black(){ function exclude_category( $query ) { if ( $query->is_home() && $query->is_main_query() ) { $query->set( 'cat', '-4' ); // category: black } } add_action( 'pre_get_posts', 'exclude_category' ); } if (isset($_GET['black'])) { if ($_GET['black'] == "true") { // echo "1" ; // trueの場合にのみ非表示処理しない } else { exclude_category_black() ; } } else { exclude_category_black() ; }

はい、これで、&black=trueがある場合にのみ当該のカテゴリの記事を記事一覧に含みます。
http://yuis.org/blog/?page_id=23&black=trueのような感じ。

で、次に2カテゴリこれをする場合なんですが…。


function exclude_category_black_bundle(){ function exclude_category_black( $query ) { if ( $query->is_home() && $query->is_main_query() ) { $query->set( 'cat', '-4' ); // category: black } } add_action( 'pre_get_posts', 'exclude_category_black' ); } if (isset($_GET['black'])) { if ($_GET['black'] == "true") { // echo "1" ; // trueの場合にのみ非表示処理しない } else { exclude_category_black_bundle() ; } } else { exclude_category_black_bundle() ; } function exclude_category_pink_bundle(){ function exclude_category_pink( $query ) { if ( $query->is_home() && $query->is_main_query() ) { $query->set( 'cat', '-3' ); // category: pink } } add_action( 'pre_get_posts', 'exclude_category_pink' ); } if (isset($_GET['pink'])) { if ($_GET['pink'] == "true") { // echo "1" ; // trueの場合にのみ非表示処理しない } else { exclude_category_pink_bundle() ; } } else { exclude_category_pink_bundle() ; }

これでできるはずなんですけど、add_actionが原因なのかな、2つのうち最後の1つしか動作しません。最後に定義されたものが優先されているってところでしょうか。

なんで、クエリストリング2つに分けるっていうのは、無理っぽいです。

なので、まとめて、



function exclude_category_bundle(){ function exclude_category( $query ) { if ( $query->is_home() && $query->is_main_query() ) { $query->set( 'cat', '-4,-3' ); // category: black and pink } } add_action( 'pre_get_posts', 'exclude_category' ); } if (isset($_GET['black'])) { if ($_GET['black'] == "true") { // echo "1" ; // trueの場合にのみ非表示処理しない } else { exclude_category_bundle() ; } } else { exclude_category_bundle() ; }

ってするのがいいかなとおもいます。

ボタンで切り替えられるようにする

URLを直接変えるしかフィルタリング解除の方法がないんじゃアレなので、リンクを用意します。

<?php if (is_home()) {

  echo '<a title="デフォルトで非表示になっている記事を表示します。気分を害する恐れがありますことをご了承の上ご閲覧ください。" style="    position: absolute;    right: 8em;        " onclick="window.location = document.location.href + \'&amp;black=true\'">非表示の記事を表示</a>' ;
}
?>

こんな感じ。

これを、まぁナビゲーションメニューとかヘッダーメニューとかに置いて置けばいいかと思います。

CSSは僕仕様なので、適時変えてください。

ナビゲーションメニューの上にうまく設定する方法やらは、HTMLとCSSのお話だと思うので割愛します。テーマによっても違いますし。

ShareX_ScreenShot_9f8996dd-fc1b-40b0-8100-a05eaa8cc743.png (1006×681)

続き:
wordpress: 特定カテゴリのすべての記事をnofollow/noindexする
WordPress PHP 特定カテゴリの記事に初回のアクセスがあった場合に警告する

この記事で欲しい情報が見つからなかった方へ

この記事の更新情報がある場合があります。
この記事は以下の記事とも関連性があると思われます。

WordPressでカスタムページを作って表示するPHPを制限する方法
Ubuntu 16.04にApacheでPHP7.0のローカル開発環境を構築
PHP クエリパラメータを受け取る
WordPress PHP 特定カテゴリの記事に初回のアクセスがあった場合に警告する
SQLでWordPressで非公開の記事を特定して対処する
WordPress タイトルに含む単語をそのままメタキーワードにする [SEO対策]
WordPress hooks メタディスクリプションにタイトルを含める


管理人の方針で、既存の記事の編集はせず、新しい情報や大きな既存情報の更新があった場合には、新しい記事として公開することになっています。
当記事で欲しい情報が見つからなかった・解決に至らなかった場合、これらのリンクがお役に立てるかも知れません。

どうやってこの関連記事を生成しているの?
この機能のPHPソースコード(2500行)

コメントを残す

Close Menu