web-dev-qa-db-ja.com

テンプレートでページを取得しますか?

私は複雑な状況にあります。できるだけ簡単に説明しようと思います。

次のページを想像してみてください。

  • ページ1
  • 2ページ
    • サブページ1
    • サブページ2
    • サブページ3

2ページの各サブページには、特定の分類法によるカスタム投稿タイプの投稿が一覧表示されます。単純にするために、投稿タイプをObjects、分類法をCategoriesと呼びましょう。

さまざまなカテゴリからのさまざまな投稿を一覧表示するために、サブページ用に3つの異なるページテンプレートsubpage-1-templ.phpsubpage-2-templ.php、およびsubpage-3-templ.phpがあります。これらの各テンプレートは、投稿タイプ(オブジェクト)の特定のカテゴリからの投稿を一覧表示します。ハードコーディングされています。

これまでのところすべてうまく、それは予想通りに動作します。それをハードコードする必要があるのは少し醜いですが、私は他の方法を知らないので、これは今のところ働かなければならないでしょう。 (私は完全にワードプレスを捨てることを好むが、それは別の話です)

これらのサブページはすべて、サブメニュー内に兄弟をリストしています。したがって、サブページ2にいる場合は、サブページ1、2、および3が表示されます(ただし、サブページ2には現在のクラスがあります)。うまくいきます。

今実際の問題に。サブページに表示されている投稿の1つをクリックすると、その投稿に関する詳細情報が表示されているページが表示されます。問題は私がそこにページ2のサブメニューを表示したいということです(だから、subpage1、2、3)。ハードコーディングせずにそれを行う方法がわかりません。

おそらく、これでうまくいくかどうかわかりませんが、テンプレートでページを見つけることができるかもしれません。私はobjects-template.phpと呼ばれる2ページ目のテンプレート(それは子供のためではなく、実際の親ページ)を作成することができます。 。可能であれば、テンプレートでページを取得する方法がわかりません(できればテンプレートファイル名で、テンプレート名でも動作します)。

助言がありますか?

編集

    // Query looks fine right?
    $query = new WP_Query(array(
        'meta_key' => '_wp_page_template',
        'meta_value' => 'objects-parent-page-template.php'
    ));
    // Dump the id (also tried just getting the object with get_queried_object(), still get null)
    echo '<pre>'; var_dump($query->get_queried_object_id()); die();
4
qwerty

ページテンプレートのファイル名はキー '_wp_page_template'を持つ投稿メタとして保存されているので、基本的にget_post_meta($post_id, '_wp_page_template', true);を使ってID $post_idのページのテンプレートファイル名を取得することができます。

WP_Queryまたは他のワードプレス関数で カスタムフィールドパラメータ を使用して、逆の操作(ページテンプレートのファイル名からIDを取得すること)もできます。

現在のページのテンプレートがパラメータで指定されたものであるかどうかをチェックする条件関数 is_page_template もあります。

これらはおそらくあなたの問題を解決するでしょう。そして多分ハードコードされたものを取り除くのを助けるでしょう。

5
Mridul Aggarwal