2014-10-17 1 views
1

Я пытаюсь отправить переменную в url. Поскольку у меня есть постоянные ссылки, я пытаюсь добавить правило перезаписи, как сказано в сообщении, которое я прочитал здесь ...Wordpress 4.0 отправлять переменные url с permalinks

Ну ничего не работает. Это код, который у меня есть на functions.php

add_filter('rewrite_rules_array','wp_insertMyRewriteRules'); 
add_filter('query_vars','wp_insertMyRewriteQueryVars'); 
add_filter('init','flushRules'); 

// Remember to flush_rules() when adding rules 
function flushRules(){ 
    global $wp_rewrite; 
    $wp_rewrite->flush_rules(); 
} 

// Adding a new rule 
function wp_insertMyRewriteRules($rules) 
{ 
    $newrules = array(); 
    $newrules['view-article/(.+)'] = 'index.php?pagename=view-article&aid=$matches[1]'; 
    $finalrules = $newrules + $rules; 
     return $finalrules; 
} 

// Adding the var so that WP recognizes it 
function wp_insertMyRewriteQueryVars($vars) 
{ 
    array_push($vars, 'aid'); 
    return $vars; 
} 

//Stop wordpress from redirecting 
remove_filter('template_redirect', 'redirect_canonical'); 

и это призыв получить переменную.

$aid = urldecode($wp_query->query_vars['aid']); 

Что я делаю неправильно? :( Мой WordPress версии 4.0 (последняя)

+0

Что вы пытаетесь сделать ... например, какой пример URL и конечный результат? – rnevius

+0

Im пытается посетить «misyte.com/view-article/23», и на этой странице создайте динамический вид из другой базы данных, поэтому мне нужно получить и ID для запроса. – javirescalvo

ответ

0

Попробуйте следующий код:

add_action('init', 'flush_urls'); 

function flush_urls() 
{ 
    // Execute flush_rules() on every request can 
    // slow down your entire website 
    if('clean' !== get_option('flush_urls', '')) 
    { 
     flush_rewrite_rules(); 
     add_option('flush_urls', 'clean'); 
    } 
} 

add_action('init', 'register_rewrite_rules', 0); 

function register_rewrite_rules() 
{ 
    add_rewrite_tag('%aid%',   '([^/]+)'); 

    add_rewrite_rule(
     "view-article/([^/]+)/?", 
     'index.php?pagename=view-article&aid=$matches[1]', 
     "top" 
    ); 
} 

Наконец в вашем template-redirect или более поздней действия/крючок, вы должны сделать следующее:

global $wp_query; 

echo $wp_query->query_vars['pagename']; 
echo $wp_query->query_vars['aid']; 

Если вы не видите эти переменные внутри $ wp_query, попробуйте снова сохранить постоянные ссылки в вашей панели WordPress. Это очистит кеш URL.

+0

Один ")" Отсутствует первый, если. Но все отлично, теперь я могу проверить первую переменную «pagename», но я не могу получить вторую ее. На url «misyte.com/view-article/23» Я могу распечатать статью в виде pagename, но Я не могу напечатать 23 в качестве помощи. – javirescalvo

+0

Попытайтесь сменить двойные кавычки, заверните оператор index.php? Pagename = view-article & aid = $ matches [1] в одиночные и, конечно, если вы довольны этой модификацией, пожалуйста, поддержите мой ответ и проверьте его как правильный :) –

+1

Он отлично работает! Я предполагаю, что добавление операторов в это правило я могу отправить больше переменных. – javirescalvo