is_singular()だと後から対象となる投稿タイプを追加したい場合に、すべての条件分岐を変更するのが面倒&ミスが起こるかも知れないので、独自に判別する関数を作成した時のコードと、それを使った条件分岐の書き方などのメモページです。
本ページ掲載のコードを使用するときは
本ページで掲載しているコードは、以下に了承した上で使用ください
- コードは商用・非商用問わず自由に使っていただいて構いませんが、コード追加による不具合やトラブルが発生しても当方では一切責任を負いません
- コードは有効化しているテーマのfunctions.php、style.cssなどへ追加することで機能します。それらのファイルへの変更を行うことに不安のある方は使用しないでください
- コードは本ページの公開日時点で私の環境において動作したものです。WordPressバージョン他環境の違いによって動作しないことがあります
- コードは、セキュリティ、コードの正確さなどにおいて完全なものではありません。中には紹介するコードを簡略化するために省略している部分があるものもありますので、ご自身でコードを十分に検証し、必要な部分の編集を行った上で使用するようにしてください
- 掲載しているのは参考コードです。自身の環境に合わせるための編集はご自身で対応いただく必要があります(コメント欄等から質問いただいても基本回答は致しません)
- 掲載しているコードの転載を禁じます(SNSで紹介いただいたり、本ページへのリンクを張っていただくことは大歓迎です)
投稿タイプの指定を独自コールバック関数化
基本は「投稿(post)」とした上で、「pwcn_is_single_filter」フックを使って後から一括で投稿タイプの変更(追加したカスタム投稿タイプを含めたり)ができるようにする。
ただし、「固定ページ(page)」は、それ用の関数を使用すべき場合が存在するので、フックの中にpageが指定されていても最終無視するようにしている(こうしておかないと2重に処理されたり、処理されなかったりが出てくる)。
function pwcn_is_single(){
$posttypes ='post';
$posttypes = apply_filters('pwcn_is_single_filter',$posttypes);
$post_types_array = explode(',', $posttypes);//「,」で投稿タイプを分割
$result = in_array(get_post_type(), $post_types_array);
// pageを除外する
if (get_post_type() === 'page') {
$result = false;
}
return $result;
}
「pwcn_is_single_filter」フィルターフック
以下をテーマのfunctions.phpへ追加して、投稿タイプを「,」区切りで複数指定することで、pwcn_is_single()で条件分岐している条件がすべて変更される。
指定された投稿タイプに塗り替わるので、必ず「post」は指定すること。判別関数上で「page」は除外(false)になるので、pageを含めても問題ないようにしている。
function pwcn_change_default_posttype() {
$new_posttype = '複数の投稿タイプを「,」区切りで指定';
$posttypes = $new_posttype;
return $posttypes;
}
add_filter( 'pwcn_is_single_filter', 'pwcn_change_default_posttype' );
pwcn_is_single()の使用方法
基本的な条件分岐
デフォルトの状態では組み込み関数の「is_single()」と同じ動作をし、フックで複数の投稿タイプを指定した場合はpageを除く指定した投稿タイプのうちのいずれかが合致したら..という条件になる。
従って、固定ページに関しては「is_page()」を使う必要があるし、フロントページにしている固定ページを除外する必要も出てくる。
フロントページを除く固定ページまたは投稿タイプのいずれか..という条件
if( (pwcn_is_single() || is_page()) && !is_front_page()){
フロントページを除く固定ページまたは投稿タイプのいずれか..という場合の処理コード
}
管理画面の一覧のカラムの表示条件
指定しておくことで、余分な投稿タイプ(プラグインが生成する投稿タイプなど)へ出力されなくなる。
function ユーザー定義関数名( $columns ) {
if(haup_is_single()){
$columns['カラムのスラグ(ID)'] = __( 'カラムの表示名', 'テキストドメイン' );
}
return $columns;
}
add_filter( 'manage_posts_columns', 'ユーザー定義関数名' );
/* 固定ページは「manage_pages_columns」なので別で書く */
function ユーザー定義関数名2( $columns ) {
$columns['カラムのスラグ(ID)'] = __( 'カラムの表示名', 'テキストドメイン' );
return $columns;
}
add_filter( 'manage_posts_columns', 'ユーザー定義関数名2' );
表示させる内容は、カラムの中身を定義するユーザー定義関数に「manage_posts_columns」と「manage_pages_columns」を両方かければいい
「pwcn_is_single_filter」の特殊な使用方法
「pwcn_is_single_filter」で再設定した投稿タイプを利用しつつ、プログラム内でうまく条件分岐させる。
「pwcn_is_single_filter」では、固定ページが除外されるので、固定ページ用に別関数を作るなどして対処すること
メタボックスの追加(add_meta_boxes)の場合
- $posttypesで初期値を指定
- $posttypesでhaup_is_single_filterによる変更を可能にする
- $post_types_arrayで$posttypesの複数の値を「,」で分けて格納する
- foreachで$post_types_arrayで取得した値を1件ずつ$post_typeに代入して繰り返す
- $posttypesでpageが指定されても除外されるので、page投稿タイプ用の記述を追加(固定ページでメタボックスを表示させる必要がなければ不要)
function haup_post_hide_ad_info(){
$text = __('見出しの文字列','hima-art-utility');
//投稿タイプを「投稿」に指定し、haup_is_single_filterで追加できるようにする
$posttypes = 'post';
$posttypes = apply_filters('haup_is_single_filter',$posttypes);
$post_types_array = explode(',', $posttypes);
//固定ページを除く指定された投稿タイプ分だけ繰り返す
foreach ($post_types_array as $post_type) {
//誤ってフィルターにpageが含まれていても除外し、投稿タイプ分だけ回す
if (get_post_type() === $post_type) {
add_meta_box(
'メタボックスのスラグ(ID)',
$title,
'内容のコールバック関数名',
$post_type,//指定した投稿タイプ
'side',
'high'
);
}
}
//固定ページのみ
if(get_post_type() === 'page'){
add_meta_box(
'メタボックスのスラグ(ID)',
$text,
'内容のコールバック関数名',
'page',//pageのみ指定
'side',
'high'
);
}
}
add_action( 'add_meta_boxes', 'haup_post_hide_ad_info' );
コメントを残す