我正在尝试使用WP制作类似web应用的东西。我现在面临的一个问题是,我无法找到我的帖子要查找的页面模板文件。我已经查看了模板文件层次结构等,但没有任何效果。我真的不知道接下来该怎么做,所以希望有人能帮助我。
我做了一个自定义的帖子类型,叫做“week”。发布一周帖子时,还会生成一周中的7天,称为“闲聊”。这些闲聊帖子是每周帖子的子帖子,也继承了发布的每周帖子的自定义分类法。请参见下面我的函数中的代码。php。
function create_days_week($new_status, $old_status, $post){
if (\'publish\' === $new_status && \'publish\' !== $old_status && $post->post_type === \'week\'){
$week = array(
"0" => \'Saturday\',
"1" => \'Sunday\',
"2" => \'Monday\',
"3" => \'Tuesday\',
"4" => \'Wednesday\',
"5" => \'Thursday\',
"6" => \'Friday\'
);
$latestposts = new wp_query(array(
\'post_type\' => \'week\',
\'orderby\' => \'post_date\',
\'order\' => \'desc\',
));
$latestpost = $latestposts->posts;
$CategoryName = get_the_terms($latestpost[0]->ID, \'area\');
$CatTermID = array($CategoryName[0]->term_taxonomy_id, $CategoryName[1]->term_taxonomy_id);
foreach ($week as $weekday) {
$PostID = wp_insert_post(array(
\'post_title\' => $latestpost[0]->post_title . \': \' . $weekday,
\'post_type\' => \'palaver\',
\'post_parent\' => $latestpost[0]->ID,
\'post_content\' => \'\'
));
wp_set_object_terms($PostID, $CatTermID, \'area\');
update_post_meta($PostID, \'_wp_page_template\', \'single-palaver.php\' );
}
}} add_action(\'transition_post_status\', \'create_days_week\', 10, 3);
所以这很好(虽然哈哈,但花了一段时间才弄清楚一切)。当我在管理中查看palaver帖子时,帖子显示为“-第1周:星期二-草稿|父页:第1周”。我不确定领先的短跑来自哪里,但由于它没有出现在标题或任何东西中,我没有真正费心去弄清楚它。
当状态仍然为draft时,URL显示如下“/?post\\u type=palver&p=1264&preview=true”。预览页面由我的单个palaver提供支持。php模板。
然而,当我发布palaver帖子时,url变为“/palavers/week-1/week-1-周四/”。这是
[重写slug->唠叨]/[周后]/[唠叨后]或
[palaver post]/[parent page/post]/[child page/post]。
Post type & taxonomy registration
register_post_type(\'palaver\', array(
\'supports\' => array(
\'title\',
\'editor\'),
\'rewrite\' => array(\'slug\' => \'palavers\'),
\'has_archive\' => true,
\'taxonomies\' => array(\'area\'),
\'public\'=> true,
\'menu_icon\' => \'dashicons-calendar-alt\',
\'hierarchical\' => \'true\',
\'labels\'=> array(
\'name\' => \'Palavers\',
\'add_new_item\' => \'Add new Palaver\',
\'edit_item\' => \'Edit Palaver\',
\'all_items\' => \'All Palavers\',
\'Singular name\' => \'Palaver\'
)
));
除了名称和标签外,Week和Palaver完全相同。
register_taxonomy(\'area\', array(\'week\', \'palaver\'), array(\'hierarchical\' => true));
<小时>
What I tried
1. 我尝试了以下模板名称文件:
单周闲谈。php单键。php第页。php分类讨论。php语言。php和一些看似合理的变体。
2. 我还尝试在生成帖子时设置模板文件:
update_post_meta($PostID, \'_wp_page_template\', \'single-palaver.php\' );
3. 我发表了一篇博文,这篇博文被识别出来,发表后从博文中加载。php文件。URL was/palavers/test。
4. 我尝试在函数中添加过滤器。php:
add_filter(\'page_template\', function ($template) {
global $post;
if ($post->post_parent) {
$template = locate_template([\'single-palaver.php\']);
}
return $template;
} );
如果有一个父页面,它只能是一篇闲聊文章,所以这本应该有效,但没有。
5. 我尝试获取页面模板slug:
<?php echo esc_html( get_page_template_slug( $post->ID ) ); ?>
然而,似乎根本没有要加载的帖子,因此这也没有帮助..:(
<小时>
What is shown?
(1) 在“正常发布”中,URL为:/palvers/week-1/week-1-thrisday/。我的页眉和页脚都已加载,它可以在索引中工作。php文件。然而,循环无法识别当前(或任何相关)post,因此除此之外没有显示任何内容。
(2) 当我转到URL:/pavers时,发生了一些完全奇怪的事情。循环识别类型为“palaver”的帖子,但在2(!)的情况下工作模板文件。首先,它经历了一个完整的单独的争吵。php模板文件(包括页眉和页脚),然后遍历完整的索引。php文件(再次包括页眉和页脚)。
Ideal situation
我还不确定我是否需要一个palaver帖子类型的存档,所以(2)并不是一个真正的优先事项。
对于(1),尽管我希望我所有的palaver帖子(不管它们是否是孩子)都加载模板文件single palaver。php。
我有种感觉,我什么都试过了,却错过了一些微不足道的东西。如果有人知道这个问题的答案或解决方案,或者其他探索途径,我们将不胜感激!
提前感谢:)