Как получить параметры на странице и избежать ошибки 404?

Вопрос или проблема

У меня есть страница, такая как http://example.com/mypage

и я хочу установить некоторые параметры $_GET следующим образом:

http://example.com/mypage/firstparameter/firstvalue

Мне нужно значение firstparameter, но я всегда попадаю на страницу 404.

Я потратил несколько часов, пытаясь разобраться с get_query_var(), add_query_vars_filter() и add_rewrite_rule(), но ничего не вышло…

Спасибо

Сочетание add_rewrite_rule() и add_rewrite_tag() немного сложно, возможно, вы можете использовать хук parse_url, который оказался полезным для меня. Код ниже предназначен для захвата нескольких параметров=значение, разделенных слэшем. Код –

add_filter( 'parse_request', 'wpse128790_parse_request' );

function wpse128790_parse_request( $wp )
{
    $pageslug = 'mypage';

    if( isset($wp->request) && strpos($wp->request, "https://wordpress.stackexchange.com/") )
    {
        $requests = explode("https://wordpress.stackexchange.com/", $wp->request);
        if( $pageslug == array_shift($requests) )
        {
            $wp->set_query_var('pagename', $pageslug);
            $wp->set_query_var('attachment', false );
            $wp->set_query_var('error', false );

            $count = count( $requests );

            if( $count > 0 )
            {
                // остановить каноническую переадресацию
                remove_action('template_redirect', 'redirect_canonical');

                foreach( $requests as $i => $request )
                {
                    // это должен быть ключ, а следующий - значение
                    if( $i == 0 || $i % 2 == 0 )
                    {
                        if( isset($requests[$i+1]) )
                            $val = $requests[$i+1];
                        else
                            $val="";

                        $wp->set_query_var( $request, $val );
                    }
                }
            }
        }
    }
}

Но вы, вероятно, фильтруете параметры с помощью in_array или что-то подобное, чтобы убедиться, что они безопасны для включения в wp query var

Можете ли вы установить параметры в строке URL непосредственно? Что-то вроде:

http://mydomain.com/mypage/?first_parameter=firstvalue&second_parameter=secondvalue

Это сделает их доступными через вызов _GET или _REQUEST.

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

Ответ или решение

Для того чтобы корректно обработать параметры в URL и избежать ошибки 404 на вашем сайте WordPress, следует использовать механизм перенаправления URL и перезапись правил. Вот пошаговая инструкция, как это можно сделать:

1. Использование функции add_rewrite_rule()

Для начала вам нужно добавить пользовательское правило перезаписи, позволяющее обрабатывать ваши параметры в URL в формате, который вы хотите:

function custom_rewrite_rule() {
    add_rewrite_rule('^mypage/([^/]+)/([^/]*)/?', 'index.php?pagename=mypage&firstparameter=$matches[1]&firstvalue=$matches[2]', 'top');
}
add_action('init', 'custom_rewrite_rule');

2. Добавление пользовательских переменных запроса

Следующий шаг — зарегистрировать пользовательские переменные с помощью add_query_var():

function custom_query_vars($vars) {
    $vars[] = 'firstparameter';
    $vars[] = 'firstvalue';
    return $vars;
}
add_filter('query_vars', 'custom_query_vars');

3. Синтаксис обработки запроса

Теперь, когда вы добавили правило и переменные запроса, вы можете их использовать в вашем коде. Внутри вашей страницы или в функции обработчика вы можете получить доступ к переменным следующим образом:

function mypage_template() {
    global $wp_query;

    $firstparameter = get_query_var('firstparameter');
    $firstvalue = get_query_var('firstvalue');

    if ($firstparameter && $firstvalue) {
        // Обработка значений переменных здесь
        echo "Parameter: " . esc_html($firstparameter) . "<br>";
        echo "Value: " . esc_html($firstvalue);
    }
}
add_action('template_redirect', 'mypage_template');

4. Обновление правил перезаписи

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

Альтернативный вариант с использованием стандартных параметров URL

Если вы хотите упростить процесс и избежать проблем с перезаписью, можно использовать стандартный подход к передаче параметров через символ вопроса в URL:

http://example.com/mypage/?firstparameter=firstvalue

В этом случае доступ к параметрам будет выполнен с помощью стандартных суперглобальных массивов:

$firstparameter = isset($_GET['firstparameter']) ? $_GET['firstparameter'] : '';

Заключение

Следуя этим шагам, вы сможете настроить параметры в URL вашей страницы и избежать ошибок 404. Выбор между сложным методом с перезаписью и простым методом с использованием стандартных параметров зависит от ваших нужд. Однако рекомендуется использовать перезапись для более чистого и SEO-дружественного дизайна URL.

Оцените материал
Добавить комментарий

Капча загружается...