如果URL与查询匹配,如何覆盖页面模板?

时间:2020-10-06 作者:JimDon

我有4个页面模板,我的主题用于所有页面-默认模板、模板一、模板二和模板三。

选择相关页面模板后,它将加载一个高级自定义字段组,使用户能够构建/设计特定页面,即模板2用于F.a.Q页面,模板3用于照片库。

我在管理侧栏中添加了4个新链接,将用户引导到;添加新页面;URL-“;发布新内容。php?post\\u type=第页;。对于每个链接,它会在URL的末尾附加模板的名称,即;发布新内容。php?post\\u type=页面(&U);template=three"E;。

我想让编辑页面根据URL中指定的模板加载正确的页面模板-“;模板=三“;将加载“;模板三;。

我可以使用URL进行检查,并使用以下代码形成一个if语句--

list($uri, $templateURL) = explode(\'&\', $_SERVER[\'REQUEST_URI\']);
    if ( $templateURL == "template=services" ) {    ...
我正在努力解决如何将其与函数挂钩的问题。php。我已尝试编辑以下内容(https://wordpress.stackexchange.com/a/231503/182411 ) 但它不起作用:

function wpse196289_default_page_template() {
  global $post;
  list($uri, $templateURL) = explode(\'&\', $_SERVER[\'REQUEST_URI\']);
    if ( \'page\' == $post->post_type )
    && ( $templateURL == "template=services" )
    {
      $post->page_template = "page-mytemplate.php";
    }
}
add_action(\'add_meta_boxes\', \'wpse196289_default_page_template\', 1); 

1 个回复
SO网友:mfast

我看到的第一个问题是,if语句中缺少一组换行括号:

your code: 

if ( \'page\' == $post->post_type )
&& ( $templateURL == "template=services" )
{...

should be:

if ( \'page\' == $post->post_type && $templateURL == "template=services" )
{...
我不确定这是否能解决你的问题,但这确实是个问题。

您希望这些是页面而不是自定义帖子类型的具体原因是什么?如果要创建三种自定义帖子类型,则可以将模板用作帖子的单发,这将应用样式和ACF字段。这也是一个不太老套的解决方案。

相关推荐

static array on functions.php

在函数中。php中,我想访问数据库一次,以获取一个ACF对象,然后在本地“保存”它,以防止对数据库的进一步请求。我想首先在“init”钩子中调用以下函数。然后,假设,当我在以后的挂钩上调用它时,由于使用了“static”关键字,$current\\u store var已经设置好了,函数将在第一个“if”返回已经保存的静态var时停止。它不起作用-当访问稍后挂钩上的函数时,“isset($current\\u store)”返回false。我做错了什么?function get_current_store