防止404并为自定义URL提供自定义模板

时间:2019-03-11 作者:leymannx

简而言之,我想要实现的是:

如果slug等于foobar 服务于foobar.php 样板

我知道我可以用page-foobar.php 但我不想为此创建页面。

add_action(\'init\', \'template_suggestions\');
function template_suggestions() {

  global $wp;

  $current_slug = add_query_arg([], $wp->request);

  if ($current_slug == \'foobar\') {

    // No, don\'t server the 404.php.
    // Serve foobar.php.
    // But how?
    // Big question mark.
  }
}

1 个回复
最合适的回答,由SO网友:leymannx 整理而成

明白了!但这是一件肮脏的事情。因为它不会处理分页和底层查询。如果你需要更多的WordPress的自定义路线背后的逻辑,请查看评论中链接的答案。但如果您只需要提供一个静态页面,这可能是一个很好的起点:

add_action(\'template_include\', \'template_suggestions\');
function template_suggestions($template) {

  global $wp;

  $current_slug = $wp->request;

  $foobar_template = locate_template([\'foobar.php\']);

  if ($current_slug == \'foobar\' && $foobar_template != \'\') {

    // Prevent 404.
    status_header(200);

    return $foobar_template;
  }

  return $template;
}
来源:Don’t use template_redirect to load an alternative template file

因为我用的是Yoast,所以我不得不用wpseo_title 而不是document_title_partspre_get_document_title 相应地设置标题。

add_filter(\'wpseo_title\', \'template_suggestions_titles\', 10, 1);
function template_suggestions_titles() {

  global $wp;

  $current_slug = $wp->request;

  if ($current_slug == \'foobar\') {

    return \'Foobar\';
  }
}

相关推荐

Custom term templates

所以,我在网上做了一些研究,但没有找到可靠的答案,所以我来了。我需要为特定类别创建自定义woocommerce类别页面。例如,我有一个类别叫做“Awesome”。而不是使用由短代码生成的常规类别页面[product_category category=\"something\"], 我想为自定义特定类别页面Awesome.我发现我需要编辑taxonomy-product_cat.php 但我不知道如何将其链接到名为awesome.换句话说,我正在考虑制作php文件的自定义副本,然后将其添加为主题templ