Как включить пользовательскую строку в постоянную ссылку Wordpress? - PullRequest
1 голос
/ 15 июля 2010

Я немного озадачен тем, как работает постоянная ссылка WordPress, особенно за пределами собственного использования Wordpress. Мои постоянные ссылки:

%post_id%-%post_name%

Но в single.php Я хочу поставить другую ссылку на саму страницу, но с другой строкой запроса. При нажатии структура постоянной ссылки может выглядеть следующим образом:

%mystring%-%post_id%-%post_name%

Я хочу получить значение из $_GET['action'], поэтому:

$_GET['action'] = %mystring%

Мой план состоит в следующем:

if('xx' == $_GET['action']){
   //do xx stuff
} else if ('yy'==$_GET['action']){
   //do yy stuff
} else {
   //show the single post as a single.php always shows
}

это означает, что я хочу при желании разобрать $_GET['action']. Если я не анализирую его, даже если он доступен в строке запроса, я хочу, чтобы страница отображалась правильно.

Так, чтобы сделать это, где я должен фактически работать? Также как мне сформировать ссылку для тега <a>? Обычно мы делаем ссылку таким образом:

<a href="'.the_permalink().'">TEXT</a>

но вы уже знаете, мне нужно добавить текст перед исходной постоянной ссылкой сообщения.

Заранее спасибо.

1 Ответ

7 голосов
/ 15 июля 2010

Оставьте структуру постоянных ссылок такой, какой она была, и проверьте мой ответ о пользовательских правилах перезаписи .

Вы можете адаптировать код следующим образом;

function my_rewrite_rules($rules)
{
    global $wp_rewrite;

    // the key is a regular expression
    // the value maps matches into a query string
    $my_rule = array(
        '(.+)/(.+)/?$' => 'index.php?pagename=matches[2]&my_action=$matches[1]'
    );

    return array_merge($my_rule, $rules);
}
add_filter('page_rewrite_rules', 'my_rewrite_rules');


function my_query_vars($vars)
{
    // this value should match the rewrite rule query paramter above

    // I recommend using something more unique than 'action', as you
    // could collide with other plugins or WordPress core

    $my_vars = array('my_action');
    return array_merge($my_vars, $vars);
}
add_filter('query_vars', 'my_query_vars');

Теперь страница my_page должна быть доступна в http://example.com/whatever/my_page и http://example.com/my_page.

Вы можете получить значение whatever, используя get_query_var('my_action').

Отказ

Это может иметь нежелательные последствия при просмотре дочерних страниц или вложенных страниц. Вы можете обойти это, передав идентификатор в вашем перезаписи, что-то вроде:

http://example.com/my_identifier/whatever/page

Примечание: вам нужно будет отредактировать правило перезаписи, если вы хотите это сделать. Каждый раз, когда вы вносите изменения в код, вам необходимо повторно сохранять структуру постоянных ссылок, чтобы «очистить» правила.

...