我有一个第三方事件插件,它使用数据库中的自定义表。我已经创建了一个主题文件(event.php),该文件根据URL中理想情况下给出的slug来提取数据。
我想为此模板创建一个自定义URL重写规则,因此URL如下所示:
/事件/我的slug
将调用事件。php文件,获取他们请求的特定事件(slug)。
函数中包含的类。php要做到这一点,需要:
<?php
$EventpageCode = new Eventpage();
register_activation_hook( __file__, array($EventpageCode, \'activate\') );
add_filter(\'rewrite_rules_array\', array($EventpageCode, \'create_rewrite_rules\'));
add_filter(\'query_vars\',array($EventpageCode, \'add_query_vars\'));
add_filter(\'admin_init\', array($EventpageCode, \'flush_rewrite_rules\'));
add_action(\'template_include\', array($EventpageCode, \'template_redirect_intercept\'));
class Eventpage {
function activate() {
global $wp_rewrite;
$this->flush_rewrite_rules();
}
function create_rewrite_rules($rules) {
global $wp_rewrite;
$newRule = array(\'event/(.+)\' => \'index.php?pagename=event&eventid=\'.$wp_rewrite->preg_index(1));
$newRules = $newRule + $rules;
return $newRules;
}
function add_query_vars($qvars) {
$qvars[] = \'eventid\';
return $qvars;
}
function flush_rewrite_rules() {
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
function template_redirect_intercept($template) {
global $wp_query;
if ($wp_query->get(\'eventid\')) {
$template = locate_template( array( \'event.php\' ) );
}
return $template;
}
function pushoutput($message) {
$this->output($message);
}
function output( $output ) {
header( \'Cache-Control: no-cache, must-revalidate\' );
header( \'Expires: Mon, 26 Jul 1997 05:00:00 GMT\' );
echo json_encode( $output );
}
}
?>
这对于显示内容非常有用,除了页面抛出404错误(但仍然显示内容)。关于如何避免返回404错误,有什么建议吗?
最合适的回答,由SO网友:Ján Bočínec 整理而成
只需删除pagename=event&并重置重写规则。。。
$newRule = array(\'event/(.+)\' => \'index.php?eventid=\'.$wp_rewrite->preg_index(1));
template\\u include*是一个
filter 不是行动!
add_filter(\'template_include\', array($EventpageCode, \'template_redirect_intercept\'));
您可以使用*wp\\u title*
function 或
filter 修改页面标题。