我创建了自定义重写规则。这些规则现在按预期转到404页。我可以用动作钩template_redirect
更改模板匹配的步骤query_var
.
但我不想创建单独的模板文件,因为页面结构取决于当前使用的主题。相反,我只想更改内容和标题。我已尝试使用更改内容the_content
过滤器,但似乎过滤器甚至没有被404页调用。
我也试过加载index.php
模板,然后使用the_content
过滤,但也不起作用。
有没有办法做到这一点?
我创建了自定义重写规则。这些规则现在按预期转到404页。我可以用动作钩template_redirect
更改模板匹配的步骤query_var
.
但我不想创建单独的模板文件,因为页面结构取决于当前使用的主题。相反,我只想更改内容和标题。我已尝试使用更改内容the_content
过滤器,但似乎过滤器甚至没有被404页调用。
我也试过加载index.php
模板,然后使用the_content
过滤,但也不起作用。
有没有办法做到这一点?
正如@Milo所指出的,从Wordpress的角度来看,这似乎是不可能的
404页面上没有可更改的内容,我建议使用另一种方法,您可以提供一个选项,将实际页面指定为这些虚拟页面的目标。
所以,我不得不改变我的计划。从插件管理员那里,我保留了一个选项,可以将页面集成为所有请求的处理程序,并发送不同的内容匹配查询变量。
我有一个404插件,基本上可以满足您的需要(如果我理解正确的话),只是它创建了一个新页面(使用与主题相同的模板),并将其注册为404页面。如果您已经有一个现有的WordPress页面(不是php文件),那么您可以使用类似以下的代码将其转换为新的404页面。Note: 您确实需要对此进行一些自定义。请参见下面代码中的注释。
//redirect on 404
function redirect_404() {
global $options, $wp_query;
if ($wp_query->is_404) {
$page_title = $this->options[\'404_page_title\'];//replace with your page title
$redirect_404_url = esc_url(get_permalink(get_page_by_title($page_title)));
wp_redirect( $redirect_404_url );
exit();
}
}
//Make sure proper 404 status code is returned
function is_page_function() {
global $options;
$page_title = $this->options[\'404_page_title\'];//replace with your page title
if (is_page($page_title)) {
header("Status: 404 Not Found");
}
else {
return;
}
}
//Register Hooks
add_action( \'template_redirect\', \'redirect_404\');
add_action(\'template_redirect\', \'is_page_function\');
如果要签出完整的插件代码,可以在此处签出:http://wordpress.org/plugins/404-silent-salesman/希望有帮助!
我已经注册了一个名为“Services”的自定义帖子类型,但当我给这篇帖子提供模板“single Services.php”时,它不接受这个,而是选择了“homepage.php”模板,你能告诉我这个问题吗?它也没有使用“archive services.php”模板,而是使用blog模板(index.php)使现代化代码如下:add_action(\'init\', \'services_register\'); function services_register() { $