为非WordPress内容添加主题文件

时间:2011-04-20 作者:Dave Hunt

我有一个第三方事件插件,它使用数据库中的自定义表。我已经创建了一个主题文件(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错误,有什么建议吗?

1 个回复
最合适的回答,由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*functionfilter 修改页面标题。

结束

相关推荐