我想在普通页面模板中显示我插件的自定义帖子类型存档。我的方法是:
function my_include_template($template) {
global $post;
if ( is_post_type_archive(\'my_custom_post\') ) {
$new_template = locate_template( array( \'page.php\' ) );
if ( \'\' != $new_template ) {
return $new_template ;
}
}
return $template;
}
add_filter(\'template_include\', \'my_include_template\', 99);
这样可以打开页面。php模板将被获取,但模板本身的get\\u template\\u part()函数将为存档中的每个帖子调用。
但事实上,我不想这样做,我只是想通过使用普通页面模板输出此存档中所有帖子的列表:例如:。
第1篇第2篇第3篇注意:我不想在插件中创建自定义模板,因为我认为我不能依赖所有的主题作者:
<?php get_header(); ?>
<div class="my-content">
...
</div>
<?php get_footer(); ?>
因为像上面这样的自定义模板文件,如果主题具有非标准结构,可能会破坏布局。
因此,这就是为什么最好在主题本身的普通页面模板中输出我的存档文件的原因。
有什么建议如何处理这个问题吗?
更新1我必须指定:当然我可以替换用户选择的内容;“我的档案”;页到目前为止,这将适用于常规自定义后期归档。
我的问题是,我还有一个分类法作为帖子的类别。所以我的鼻涕虫看起来像:
单帖:/article/postname/CPT归档:/articles/类别分类:/articles/category1/可以对两个归档使用相同的页面,但当然,在访问/articles/category1/时,只应显示该类别的帖子,并保留url。所以我不能简单地重定向到/文章/页面。
最合适的回答,由SO网友:Mateusz Hajdziony 整理而成
如果您不想提供自己的页面模板,并且不可能使用当前代码(因为循环是如何在所有帖子中循环的),我建议提醒插件用户选择一个他们希望显示插件内容的页面(作为插件设置页面上的选项)。
一旦用户选择了页面的ID,就可以使用the_content
过滤和修改页面内容,如下所示:
add_filter( \'the_content\', \'wpse210003_render_archive\' );
function wpse210003_render_archive( $content ) {
// $selected_page_id is the page ID that the user has selected for displaying your plugin\'s content
if ( is_page( $selected_page_id ) ) {
// Get your post loop here and either add it to the existing page\'s content or throw away the content and just render your loop
$content = \'My custom loop goes here\';
// Return your custom content here
return $content;
}
}
您还可以通过以下方式修改标题:
the_title
如果需要,请进行筛选。
这样,您可以确保用户选择的页面布局始终正确,并保留与创建页面相关的所有主题功能(边栏、广告空间等)。