特定のテンプレートを使用しているかどうかに基づいて、ウィジェット内のページのドロップダウンを提供する必要がある状況があります。つまり、テンプレート「Foo」を使用しているすべてのページについて、投稿IDを取得します。
ウィジェットの残りの部分をコーディングしましたが、ページIDを入力するために入力フィールドを使用しています(これは技術者以外のユーザーにとっては面倒なので、使用するページIDを把握する必要があります)。特定のテンプレートを使用しているページのページタイトルのボックスを選択します。
私はこれでWP_Queryオブジェクトを取得しようとしました:
$the_query = new WP_Query(array(
'meta_key' => '_wp_page_template',
'meta_value' => 'templates/_partner.php'
));
メタ値は(データベース内の2つのエントリに対応する)正当ではありませんが、私はウィジェットページ上では何の結果も得られません。選択ボックスが空です。
ウィジェットからWP_Queryを呼び出せませんか。それとも、この解決策について他の場所で調べる必要がありますか?
_ update _ これを実行するSQLの$ the_query->リクエストをチェックしましたが、行が返されませんでした。クエリに 'post_type' => 'page'がありませんでした。
WP_Queryはデフォルトで投稿のみを通過します。
投稿タイプとしてpage
を追加してください。
$the_query = new WP_Query(array(
'post_type' => 'page', /* overrides default 'post' */
'meta_key' => '_wp_page_template',
'meta_value' => 'templates/_partner.php'
));
参照項目: WP_Query - タイプパラメータ
wp_dropdown_pages()
を使用して、表示したいページのドロップダウンリストを直接作成することができます。
$args = array(
'name' => '_partner_page', // "name" attr of the <select> element
'id' => 'partner-page', // id attr of the <select> element
'hierarchical' => 1, // set to 0 for flat display
'echo' => 1, // set to 0 to return
'selected' => $post->ID, // ID of the option with "selected" attr, set to 0 to disable
'meta_key' => '_wp_page_template',
'meta_value' => 'templates/_partner.php'
);
wp_dropdown_pages($args);
あなたがwp_dropdown_pages()
に渡すことができる多くの成果物があります。 get_pages()
はドロップダウンリストとして表示されるページのリストを取得するためにwp_dropdown_pages()
を使用するので、この関数の codex page にあるものの他に、 get_pages()
functionにリストされた引数を渡すこともできます。
$query= new WP_Query(array(
'post_type' => 'page', /* overrides default 'post' */
'meta_key' => '_wp_page_template',
'meta_value' => 'page-templates/{template name}.php'
));
私のカスタムテーマは page-templates フォルダーを使用していたので、これは私のために働きました。