Передача параметров URL в страницы WordPress и ЧПУ

28 февр. 2017 г., 02:48:32
Просмотры: 18.1K
Голосов: 1

Я создаю шорткод следующим образом:

function test_func( $atts ) {   
    // Возвращаем GET-параметр 'myvar'
    return $_GET['myvar'];
}
add_shortcode( 'test', 'test_func' );

и страницу с именем myparameters

так что итоговый URL выглядит так:

http://website.com/myparameters

если я попробую так, то все работает идеально:

http://website.com/myparameters/?myvar=theparameter

Но я хочу иметь красивый URL или ЧПУ, например:

http://website.com/myparameters/theparameter/

Но выдается страница "Не найдено".

Я пробовал руководства, например ЭТО, но ничего не помогло.

2
Комментарии

этот ответ подойдет вам.

Milo Milo
28 февр. 2017 г. 04:06:59

@Milo ну, я исследовал немного больше, если использовать global $wp; $view = $wp->query_vars['myvar']; чтобы получить параметр, и теперь это работает нормально с add_rewrite_rule и возвращает $view в функции шорткода, я оставлю полный пример, когда он будет готов.

metalbox metalbox
28 февр. 2017 г. 04:16:09
Все ответы на вопрос 3
2

Вы формируете GET-запрос, например, ?var=1&var2=2, но отправляете его как POST-запрос. Вам необходимо отправить запрос как GET-запрос, чтобы переменные отображались в адресной строке, как вы ожидаете.

28 февр. 2017 г. 04:15:52
Комментарии

пример ссылки @milo — это ответы, нам нужно использовать global $wp; чтобы получить значение вот так: $wp->query_vars['myvar'];

metalbox metalbox
28 февр. 2017 г. 04:19:42

Я неправильно понял ваш вопрос, думал, что вы хотите узнать, почему получаете один формат вместо другого в адресной строке. Хорошо, что вы нашли решение своей проблемы.

Matt G Matt G
28 февр. 2017 г. 04:24:21
3

Это полный пример, который отлично работает с одним параметром — просто замените id на идентификатор вашей страницы.

function bartag_func( $atts ) { 
    global $wp;
    $view = $wp->query_vars['jp_stn'];
    return $view;
}
add_shortcode( 'bartag', 'bartag_func' );


function cdl_rewrite_rule(){
    add_rewrite_rule(
        'pronosticador/([-a-z]+)/?$',
        'index.php?page_id=52&jp_stn=$matches[1]',
        'top'
    );
}
add_action( 'init', 'cdl_rewrite_rule' );

function cdl_query_vars( $query_vars ){
    $query_vars[] = 'jp_stn';
    return $query_vars;
}
add_filter( 'query_vars', 'cdl_query_vars' );
28 февр. 2017 г. 04:24:24
Комментарии

@Milo Что ты думаешь об этом? Это правильный способ получения значения с красивым URL

metalbox metalbox
28 февр. 2017 г. 04:26:45

@kromosome Что ты думаешь об этом? Это правильный способ получения значения с красивым URL

metalbox metalbox
28 февр. 2017 г. 04:26:55

Примечание: Сбросьте постоянные ссылки (Flush Permalink)

metalbox metalbox
28 февр. 2017 г. 04:39:17
0

Для создания красивых URL с параметрами в WordPress можно использовать правила перезаписи, предоставляемые WordPress, вместе с пользовательской конечной точкой или правилом перезаписи.

Вам необходимо зарегистрировать пользовательское правило rewrite для обработки красивого URL. Добавьте следующий код в файл functions.php вашей темы:

function custom_rewrite_rule() {
    add_rewrite_rule('^myparameters/([^/]+)/?', 'index.php?pagename=myparameters&myvar=$matches[1]', 'top');
}
add_action('init', 'custom_rewrite_rule', 10);

function custom_query_vars($query_vars) {
    $query_vars[] = 'myvar';
    return $query_vars;
}
add_filter('query_vars', 'custom_query_vars', 10, 1);

После добавления правила перезаписи необходимо сбросить правила перезаписи, чтобы WordPress распознал новое правило. Это можно сделать, посетив страницу "Настройки" > "Постоянные ссылки" в админ-панели WordPress.

Обновите вашу функцию шорткода, чтобы получать значение myvar из переменных запроса вместо $_GET:

function test_func($atts) {
    $myvar = get_query_var('myvar');
    return $myvar;
}
add_shortcode('test', 'test_func');
28 февр. 2024 г. 15:18:05