我如何找出我的自定义子帖子正在寻找哪个(页面)模板文件?

时间:2020-05-16 作者:bramdek

我正在尝试使用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。

我有种感觉,我什么都试过了,却错过了一些微不足道的东西。如果有人知道这个问题的答案或解决方案,或者其他探索途径,我们将不胜感激!

提前感谢:)

1 个回复
SO网友:rank

如果认为您使用了错误的筛选器,请尝试使用“single\\u template”。

我假设您已经创建了一个插件来创建自定义帖子类型。在plugin文件夹中有一个“templates”文件夹,您可以在其中放置名为“palver\\u single.php”的单页模板。

function palaver_single_mapping($single) {

global $post;

    if ( $post->post_type == \'palaver\' ) {
        if ( file_exists( plugin_dir_path( __FILE__ ) . \'/templates/palaver_single.php\' ) ) {
            return plugin_dir_path( __FILE__ ) . \'/templates/palaver_single.php\';
        }
    }

    return $single;
}
add_filter( \'single_template\', \'palaver_single_mapping\' );
因此,如果查看单个palaver帖子,将使用templates文件夹中的模板文件。

相关推荐

如何列出带有摘录的子页,例如[Child-Pages Depth=“1”Excerpt=“1”]

我想构建一个快捷码函数来生成父页面的子页面的HTML列表,并包含摘录。类似这样:<ul> <li> <h3>Child Page Title 1</h3> <p>Excerpt 1</p> <li> <li> <h3>Child Page Title 2</h3> <p>Exc