我在设置Wordpress模板时遇到问题。我不确定如何实现以下目标。我的网站设置如下:
我有自定义帖子类型“章节”。 “章节”是其他CPT的父母。我有一些帖子类型,例如:评论,访谈,博客帖子......
在章节页面上,我为本章中的每种帖子类型执行了不同的WP_Query。
page template single-chapter.php
现在我希望能够点击“Blogpost(2)”并打开当前章节中所有博客帖子的存档页面。我怎样才能做到这一点?我假设我应该创建一个模板页面“archive-blogpost.php”。我已经发现我可以使用以下链接链接到此页面:
<?php echo get_post_type_archive_link( 'blogpost' ); ?>
但是,我无法看到这个页面在我目前所在的章节中是如何知道的?
答案 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']));
有了这个,我可以查询页面上自定义帖子类型的所有子帖子。
我还使用会话变量来跟踪我当前的章节。