您似乎混淆了作为帖子/页面的数据库对象和作为帖子/页面的渲染输出。中包含的数据wp_posts
和wp_post_meta
表格定义post对象。当查询给定的数据库对象时,模板文件定义渲染输出。
有三种类型的查询:给定上下文的默认查询、主查询、核心定义的辅助查询(如导航菜单)和其他地方(主题或插件)定义的自定义查询。
给定上下文的默认主查询从不受自定义查询的影响,即使它可以通过过滤进行修改pre_get_posts
或者用棍棒query_posts()
.
你打电话时会发生什么get_page()
WordPress查询与给定ID关联的post对象,而不是用于在其正常上下文中呈现该对象的模板文件。
长话短说:如果要在其他上下文中运行三个自定义页面模板中的每个模板中的相同自定义查询,则需要执行与在这三个自定义页面模板上使用的代码相同的代码。
(另外:请说明您尚未修改主题index.php
用于此目的的文件?这样做,您将完全打破主题的模板层次结构。)
最干净的解决方案是将自定义查询代码拆分为模板部分,每个自定义页面模板对应一个文件;也许:
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();
然后,在site front page, 创建名为front-page.php
, 并从上面调用所有三个模板零件文件:<?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();