【问题标题】:Wordpress Add custom permalinkWordpress 添加自定义永久链接
【发布时间】:2013-08-15 08:41:40
【问题描述】:

我在 wordpress 中有一个动态页面设置,它使用$_GET['id'] php 变量来查询数据库。问题是我的 url 格式如下所示:

http://site.com/business/id?=123

使网址看起来像这样的最佳方式是什么:

http://site.com/business/business-name-here

是否使用 .htaccess 文件中的重写规则来完成? 提前致谢

【问题讨论】:

    标签: wordpress url-rewriting permalinks


    【解决方案1】:

    我找到了一个很棒的课程,Kyle E 尝试一下。

    <?php
    /*
    //Author Kyle E Gentile
    //To use this class you must first include the file.  
    //After including the file, you need to create an options array.  For example:
    $options = array(
        'query_vars' => array('var1', 'var2'),
        'rules' => array('(.+?)/(.+?)/(.+?)/?$' => 'index.php?pagename=$matches[1]&var1=$matches[2]&var2=$matches[3]')
    );
    //After creating our $option array, 
    //we will need to create a new instance of the class as below:
    $rewrite = new Add_rewrite_rules($options);
    //You must pass the options array, this way. (If you don't there could be problems) 
    //Then you can call the filters and action functions as below:
    add_action('wp_head', array(&$rewrite, 'flush_rules'));
    add_action( 'generate_rewrite_rules', array(&$rewrite, 'add_rewrite_rules') );
    add_filter( 'query_vars', array(&$rewrite, 'add_query_vars') );
    //That is it.
    */
    
    //prevent duplicate loading of the class if you are using this in multiply plugins
    if(!class_exists('add_rewrite_rules')){
    
        class Add_rewrite_rules{
    
            var $query_vars;
            var $rules;
    
            function __construct($options){
                $this->init($options);
            }
    
            function init($options){
                foreach($options as $key => $value){
                    $this->$key = $value;
                }
            }
    
            function rules_exist(){
                global $wp_rewrite;
    
                $has_rules = TRUE;
    
                foreach($this->rules as $key => $value){
                    if(!in_array($value, $wp_rewrite->rules)){
                        $has_rules = FALSE;
                    }   
                }
    
                return $has_rules;
            }
    
            //to be used add_action with the hook 'wp_head'
            //flushing rewrite rules is labor intense so we better test to see if our rules exist first
            //if the rules don't exist flush its like after a night of drinking  
            function flush_rules(){
                global $wp_rewrite;
    
                if(!$this->rules_exist()){
                    //echo "flushed"; // If want to see this in action uncomment this line and remove this text and you will see it flushed before your eyes
                    $wp_rewrite->flush_rules();
                }
            }
    
            //filter function to be used with add_filter() with the hook "query_vars"
            function add_query_vars($query_vars){
    
                foreach($this->query_vars as $var){
                    $query_vars[] = $var;
                }
    
                return $query_vars;
            }
    
            //to be used with a the add_action() with the hook "generate_rewrite_rules"
            function add_rewrite_rules(){
                global $wp_rewrite;
    
                $wp_rewrite->rules = $this->rules + $wp_rewrite->rules;
            }
    
        }
    
    }
    ?>
    

    将以下函数添加到插件/函数文件的 init 中。

    public function rewriteRules()
    {
    //Add the query variables to the list so wordpress doesn't discard them or worse use them to try and find by itself what page to serve.
        $options = array(
            'query_vars' => array('trainingid', 'vakname'),
            'rules' =>
                array( 'uncategorized/vak/([^/]+)/([^/]+)/?$' => 'index.php?p=1316&vakname=$matches[1]&level=$matches[2]'
                )
        );
    
        //I use a autoloader but if you don't you have to include the class.
        //include_once('path/to/AddRewriteRules.php');
        $rewrite = new AddRewriteRules($options);
        add_action('wp_head', array(&$rewrite, 'flush_rules'));
        add_action('generate_rewrite_rules', array(&$rewrite, 'add_rewrite_rules'));
        add_filter('query_vars', array(&$rewrite, 'add_query_vars'));
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-11
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 2016-04-21
      相关资源
      最近更新 更多