如何在静态页面上模拟固定链接行为

时间:2013-09-04 作者:codecowboy

我正在Wordpress网站上工作,该网站在给定页面上显示事件API的结果。

页面位于/whats on。

我想在页面上提供像mysite一样格式的链接。com/whats on/name事件,该事件将链接到另一个显示事件详细信息的页面。如果我只是添加链接,Wordpress将尝试查找一篇名为“事件名称”的帖子,并显示404。

有没有办法绕过这种行为?如何在插件中添加重写?

更新的代码:

class SpektrixPlugin {

    public function activate() {
        global $wp_rewrite;
        flush_rewrite_rules();
        add_action(\'init\',array($this, \'properties_add_rewrite_rules\'));
        add_filter(\'query_vars\', array($this, \'properties_add_query_vars\'));
    }

    public function properties_add_query_vars( $vars) {
        $vars[] = "event"; // name of the var as seen in the URL
        return $vars;
    }

    public function properties_add_rewrite_rules() {
        //Change your_page_id with the ID of the whats-on page
        add_rewrite_rule( \'whats-on/(.+)/?$\' , \'index.php?p=8&event=\'.$matches[1] , \'top\' );
    }

    public function spektrix_list_events() {
        $api = new SpektrixApiClient();
        return $api->getAllEvents();
    }
}

$SpektrixEvents= new SpektrixPlugin();

register_activation_hook( __file__, array($SpektrixEvents, \'activate\') );

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

你需要add rewrite rules query\\u vars可以满足您的需要。

例如在您的功能中。php或插件文件:

// Register a new vars to be used in the rewrite rules
add_filter(\'query_vars\', \'properties_add_query_vars\');
function properties_add_query_vars( $vars) {
    $vars[] = "my_action"; // name of the var as seen in the URL
    return $vars;
}

// Add the new rewrite rule to existings ones
add_action(\'init\',\'properties_add_rewrite_rules\');
function properties_add_rewrite_rules() {
    //Change your_page_id with the ID of the whats-on page
    add_rewrite_rule( \'whats-on/(.+)/?$\' , \'index.php?page_id=your_page_id&my_action=\'.$matches[1] , \'top\' );
}
然后在页面上的whats模板中(创建一个page-whats-on.php模板文件,see this):

global $wp_query;
if(isset($wp_query->query_vars(\'my_action\')) && $wp_query->query_vars(\'my_action\') == \'some_action\'){
    //Do what you want
}
在尝试测试新的重写规则之前,不要忘记刷新重写规则。您可以通过转到设置->永久链接并单击保存按钮来完成此操作。

编辑更新后的问题,您的代码中有一些问题。

我的代码中有一个错误,页面的查询变量为page_id 我写了p. 对此表示抱歉I asked a related question myself).我已经测试了这段代码,它正在运行:

class SpektrixPlugin {

    public function __construct(){
        add_filter(\'query_vars\', array($this, \'add_query_vars\'));
        add_action(\'init\', array($this, \'add_rewrite_rules\'));
    }

    public function activate() {
        flush_rewrite_rules();
    }

    public function deactivate() {
        flush_rewrite_rules();
    }

    public function add_query_vars($vars) {
        $vars[] = "event"; // name of the var as seen in the URL
        return $vars;
    }

    public function add_rewrite_rules() {
        //Change your_page_id with the ID of the whats-on page
        add_rewrite_rule( \'whats-on/(.+)/?$\' , \'index.php?page_id=8&event=$matches[1]\' , \'top\' );
    }

    public function spektrix_list_events() {
       //$api = new SpektrixApiClient();
       //return $api->getAllEvents();
       return \'Test\';
    }
}

$SpektrixEvents = new SpektrixPlugin();

register_activation_hook( __file__, array($SpektrixEvents, \'activate\') );
register_deactivation_hook( __file__, array($SpektrixEvents, \'deactivate\') );
现在需要检查查询变量event 存在。在你的情况下,我认为,正如我之前所说的,最好的检查方法是在tempalte页面。您可以为ID为8的页面创建特定模板。只需创建第8页。php文件并将其放在主题文件夹中(您也可以将其放在插件文件夹中,但这需要额外的工作)。第8页。php您可以制作如下内容:

<?php
  get_header();

  global $wp_query;
  if($wp_query->get(\'event\') == \'event\'){
       echo $SpektrixEvents->spektrix_list_events();
  }

  get_footer();
 ?>
现在如果你去你的网站。com/whats on/event/your get“Test”打印出来。

结束

相关推荐

wordpress permalinks tweeks

在创建任何帖子后,我都会遵循permalink结构。。。http://domain.com/wp/postname根据Permalink设置。。。。职位名称:http://domain.com/wp/sample-post/这个永久链接对于页面来说很好,但我如何才能像下面这样添加blog作为前缀。。。。http://domain.com/wp/blog/文章标题http://domain.com/wp/blog/类别/职位名称如果你需要更多信息,请告诉我,谢谢。