次のヘッダを付けたproduct.php
という名前のテンプレートを作成しました。
<?php
/*
Template Name: Product Page
*/
「商品ページ」テンプレートを使用するすべてのページをサイドバーに一覧表示する方法を教えてください。
私はwp_list_pages()
関数のドキュメントを読んでみましたが、使用されているテンプレートではなく、post_type
でフィルタリングを一覧表示することしかできないようでした。
WP_Query
meta_query
でこれを行うことができます。ページテンプレートのファイル名は、キー_wp_page_template
の下のpost metaに保存されています。
$args = array(
'post_type' => 'page',
'posts_per_page' => -1,
'meta_query' => array(
array(
'key' => '_wp_page_template',
'value' => 'product.php'
)
)
);
$the_pages = new WP_Query( $args );
if( $the_pages->have_posts() ){
while( $the_pages->have_posts() ){
$the_pages->the_post();
the_title();
}
}
wp_reset_postdata();
ページテンプレートは、キー'_wp_page_template'
を持つメタフィールドを介して設定されます。このメタフィールドの値はテンプレートファイルの phpフルファイル名 です。
'page-products.php'
そのため、get_pages
からmeta_keyおよびmeta_valueパラメータを使用して(またはWP_Query
引数とともに'meta_query'
を使用して)特定のテンプレートを含むページを簡単に取得するためのカスタム関数を作成できます。
get_pages_by_template( $template = '', $args = array() ) {
if ( empty($template) ) return false;
if ( strpos($template, '.php') !== (strlen($template) - 4) ) $template .= '.php';
$args['meta_key'] = '_wp_page_template';
$args['meta_value'] = $template;
return get_pages($args);
}
この関数は最初の(必須の)引数としてテンプレートを受け入れ、2番目の(オプションの)引数として get_pages のすべての引数を受け入れます。
テンプレートは '.php'拡張子の有無にかかわらず渡すことができます。
$pages = get_pages_by_template('page-products');
または
$pages = get_pages_by_template('page-products.php');
その後、必要に応じて取得したページを使用できます。それらをループしてマークアップを出力したり、関数を使用するカスタムウィジェットを作成したりするなどです。