web-dev-qa-db-ja.com

ページテンプレートの表示内容(get_page)

私の問題は、get_page()を使用してindex.phpに3ページのコンテンツを表示したことです。問題は、それらの各ページに独自のページテンプレートがあることです。

/*
Template Name: another page template
*/

これはカテゴリーに3つの投稿があるループを含みます。

この方法で私はWPエディタでタイプされたページのコンテンツだけを見ることができます、しかしページ上の質問された投稿の痕跡は見えません。

Index.phpのページテンプレートから3つの投稿を表示するにはどうすればいいですか?

私が使っているindex.phpのページを表示するために:

<?php
 $id = 1;
 $post = get_page($id);
 $content = apply_filters('the_content', $post->post_content);
 echo $content;
?>

そしてページはthe_loopで独自のテンプレートを持っています:

<?php query_posts( array( 'category_name' => 'name', 'posts_per_page' => 3 ));
  while (have_posts()) : the_post(); ?>
<?php the_content(); ?>
<?php endwhile; ?>
1
cachaito

データベースオブジェクト がポスト/ページであり、 レンダリングされた出力 がポスト/ページであることを混同しているようです。 wp_postsおよびwp_post_metaテーブルに含まれているデータはpost object を定義します。 テンプレートファイル は、与えられた データベースオブジェクト が照会されたときの レンダリングされた出力 を定義します。

3種類のクエリがあります: デフォルト、与えられたコンテキストに対するmain クエリ、 secondary coreで定義されたクエリ(Navメニューなど)、および custom 他の場所(テーマまたはプラグインによって)で定義されているクエリ。

特定のコンテキストの default、main クエリは、pre_get_postsをフィルタリングすることによって、またはquery_posts()によってそれを大胆にすることによって修正することができますが、カスタムクエリの影響を受けません。

get_page()を呼び出したときに起こることは、WordPressが、通常のコンテキストでそのオブジェクトをレンダリングするために使用される テンプレートファイル ではなく、特定のIDに関連付けられたpost object を照会することです。

手短に言うと、3つのカスタムページテンプレートのそれぞれで同じカスタムクエリを他のコンテキストで実行する場合は、これら3つのカスタムページテンプレートで使用するのと同じコードを実行する必要があります。

(また、この目的のためにテーマのindex.phpファイルを変更していないと言ってもよろしいですか?そうすることによって、あなたはあなたのテーマのテンプレート階層を完全に壊すでしょう。)

最も明確な解決策は、カスタムクエリコードを template-part files(各カスタムページテンプレートごとに1つ)に分割することです。おそらく:

  • loop-three-latest-category-x.php
  • loop-three-latest-category-y.php
  • loop-three-latest-category-z.php

だから、あなたのカスタムページテンプレートの一つはこんな感じになるでしょう:

/**
 * Template Name: another page template
 * 
 * Category X custom page template
 * 
 * Used to display the three latest posts in 
 * category x.
 */

get_header();

get_template_part( 'loop-three-latest-category-x' );

get_footer();

次に、 サイトのフロントページ 3つすべての カスタムクエリを出力するには、front-page.phpという名前のテンプレートファイルを作成し、上から3つすべてのテンプレート部分ファイルを呼び出します。

<?php
/**
 * Front-page template
 * 
 * Used to render the site front page
 */

get_header();

get_template_part( 'loop-three-latest-category-x' );
get_template_part( 'loop-three-latest-category-y' );
get_template_part( 'loop-three-latest-category-z' );

get_footer();
2
Chip Bennett