有没有办法创建两个模板的单一自定义帖子类型的页面?

时间:2022-01-04 作者:Victor Sokoliuk

这是一项奇怪的任务,但我确实面对了它。在主页上有显示所有自定义帖子类型的循环。我需要有机会当用户点击cpt链接从主页显示一种类型的单一页面。如果用户从内部页面转到自定义帖子类型,则显示其他单个自定义帖子类型模板。我在stackoverflow但它不能正常工作。stackoverflow中的代码:

在主页上,我添加了如下链接:

<a href="<php the_permalink();?>?template=gallery"> Gallery Page </a>
在自定义post type single page中添加以下代码块:

if($_POST[\'template\'] == \'gallery\') {
    get_template_part(\'single\', \'gallery\'); // the file for this one is single-gallery.php
 }elseif($_POST[\'template\'] == \'other\'){
   get_template_part(\'single\', \'other\'); // the file for this one is single-other.php
 }
乍一看,这是有道理的,但它不起作用。请帮助解决此问题。

2 个回复
最合适的回答,由SO网友:Sébastien Serre 整理而成

我想你需要在template_includehttps://developer.wordpress.org/reference/hooks/template_include

此时,可以添加条件并返回正确的模板路径

add_filter( \'template_include\', \'redirect_single\' );
function redirect_single( $template ){
if($_POST[\'template\'] == \'gallery\') {
    $template = path/to/your/template;
 }elseif($_POST[\'template\'] == \'other\'){
    $template = path/to/your/template;
 }
return $template;
}

SO网友:DeltaG

如果你走这条路,你应该使用$_GETnot $_POST. 因为看起来你没有发出post请求。

因此:

if ( isset($_GET[\'template\']) && $_GET[\'template\'] == \'gallery\' ) {
除此之外,您应该使用<?php 而不是<php.

相关推荐

连接到php:8-fpm容器和MariaDB容器的nginx docker容器中的WordPress不会在插件激活时创建任何表

我搜索了整个网络和stackexchange,寻找原因和解决方案,但没有找到任何答案。关于自己的插件以及如何在激活时创建表的代码,有很多问题(和答案)。但这不适用于这里,因为我对wordpress插件库中的知名插件和维护插件有这个问题。So, the situation:一个拥有约20个docker堆栈的kvm来宾。每个堆栈由一个nginx、一个php:8-fpm和一个mariadb容器组成。nginx容器中有一个web目录作为共享卷,其中包含wordpress安装。(所以我没有使用wordpress d