2015-09-11 4 views
0

Я пытаюсь дать хороший URL-адрес моему пользовательскому CPT (Заказы). Это путь им пытается:Пользовательский запрос var в wordpress

add_filter('post_type_link', 'custom_post_type_link', 1, 3); 
function custom_post_type_link($link, $post = 0){ 
    if ($post->post_type == 'orders'){ 
      $order_code = 1121000+$post->ID; 
     return home_url('orders/' . $order_code); 
    } else { 
     return $link; 
    } 
} 

Предположит, что пост ИД 32, Этот код создает следующий URL: http://www.example.com/orders/1121032

Теперь я хочу написать код, чтобы отобразить сообщение с постом ID = 32 в выше url. Я где-то слышал, что должен использовать пользовательские запросы. Но я не знаю, как его использовать. Это остальная часть кода я написал

add_filter('query_vars', 'custom_add_query_vars'); 
function custom_add_query_vars($qVars){ 
$qVars[] = "code"; 
return $qVars; 
} 

add_action('init', 'custom_rewrites_init'); 
    function custom_rewrites_init(){ 
     add_rewrite_rule(
      'orders/([0-9]+)?$', 
      'index.php?post_type=orders&code=$matches[1]', 
      'top'); 
    } 
+0

Вы не можете, так как вы добавляете 1121000 к идентификатору сообщения в пределах ссылки. Переписывать нужно было бы вычесть из матча. – George

+0

@George есть способ вычесть 1121000 из матча? –

+0

Не переписывать AFAIK. Почему вы добавляете это значение в идентификатор? – George

ответ

0

После добавления пользовательских правил перезаписи, WordPress нужно сказать, чтобы активировать новые правила.

Используйте этот метод после вызова функции add_rewrite_rule.

$wp_rewrite->flush_rules(); 

Предупреждение: flush_rules дорого, вы определенно не хотите назвать его по каждому запросу. Обычно вы добавляете custom_rewrites_init и flush_rules в функцию плагина register_activation_hook.

Если вы ленивы, вы можете просто добавить его в свой код один раз, сделать запрос на сайт (который будет переписывать правила перезаписи .htaccess), а затем прокомментировать метод flush_rules.

Смежные вопросы