web-dev-qa-db-ja.com

使用しているテンプレートに基づいてページIDを取得しますか?

特定のテンプレートを使用しているかどうかに基づいて、ウィジェット内のページのドロップダウンを提供する必要がある状況があります。つまり、テンプレート「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'がありませんでした。

5
Calle

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 - タイプパラメータ

6
Michal Mau

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にリストされた引数を渡すこともできます。

2
Ahmad M
$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 フォルダーを使用していたので、これは私のために働きました。

2
Lasantha