2013-08-15 1 views
0

У меня есть динамическая настройка страницы в wordpress, которая использует переменную php-переменной $_GET['id'], чтобы сделать запрос к базе данных. Проблема заключается в том, что мой формат URL выглядит следующим образом:Wordpress Добавить пользовательскую константу

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

Что лучший способ сделать URL выглядеть следующим образом:

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

ли это было сделано с использованием правил перезаписи в файле .htaccess? Заранее спасибо

ответ

0

Я нашел отличный класс, чтобы сделать это с помощью 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; 
     } 

    } 

} 
?> 

Добавьте в функцию инициализации вашего файла плагинов/функций следующую функцию.

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')); 


}