如何设置我的Wordpress模板结构来处理我的自定义帖子类型

时间:2015-11-02 10:43:34

标签: php wordpress templates taxonomy

我在设置Wordpress模板时遇到问题。我不确定如何实现以下目标。我的网站设置如下:

我有自定义帖子类型“章节”。 “章节”是其他CPT的父母。我有一些帖子类型,例如:评论,访谈,博客帖子......

在章节页面上,我为本章中的每种帖子类型执行了不同的WP_Query。

page template single-chapter.php

现在我希望能够点击“Blogpost(2)”并打开当前章节中所有博客帖子的存档页面。我怎样才能做到这一点?我假设我应该创建一个模板页面“archive-blogpost.php”。我已经发现我可以使用以下链接链接到此页面:

<?php echo get_post_type_archive_link( 'blogpost' ); ?>

但是,我无法看到这个页面在我目前所在的章节中是如何知道的?

2 个答案:

答案 0 :(得分:0)

到目前为止,我从未使用WP类型插件,但是您可以执行以下操作:将一个章节参数添加到归档链接(具有重写规则),您将在博客文章归档模板中显示并显示有条件的帖子到这个参数。

首先我们更改存档链接以发送章节slug:

<?php echo get_post_type_archive_link( 'blogpost' ) . '/' . $post->post_name; ?>

然后我们在 functions.php 中定义这个新的rewrite tag

function custom_rewrite_tag() {
    add_rewrite_tag('%chapter%', '([^&]+)');
}
add_action('init', 'custom_rewrite_tag', 10, 0);

为了使网址看起来不错,我们会添加重写规则(因此您没有像/archive/?chapter=chapter-1这样的网址,但是/archive/chapter-1) - 这仍然会转到功能。 PHP

function custom_rewrite_rule($rules) {
    add_rewrite_rule('^archive/([^/]+)/?$', 'index.php?post_type=blogposts&chapter=$matches[1]', 'top');
}
add_filter('init', 'custom_rewrite_rule', 10, 0);

您可能需要根据您的配置更改网址/帖子类型名称。

最后,您可以使用$wp_query->query_vars数组在您的blogposts存档模板中获取此查询arg:

$wp_query->query_vars['chapter']

由于我对WP类型知之甚少,我对后面的内容并不十分肯定,但似乎你可以用这个来查询本章的子帖:

if(isset($wp_query->query_vars['chapter']) && $chapter = get_page_by_path($wp_query->query_vars['chapter'])) {
    $childargs = array(
        'post_type' => 'blogposts',
        'numberposts' => -1,
        'meta_query' => array(array('
            key' => '_wpcf_belongs_property_id', 'value' => $chapter->ID
        ))
    );
    $child_posts = get_posts($childargs);
} else {
    // default template : display all posts
}

答案 1 :(得分:0)

我使用WP类型函数来实现我想要的:

$ child_posts = types_child_posts(“blogpost”,array('post_id'=&gt; $ _GET ['wpv-pr-child-of']));

有了这个,我可以查询页面上自定义帖子类型的所有子帖子。

我还使用会话变量来跟踪我当前的章节。