Правило переписывания пользовательской таксономии

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

Я хочу, чтобы мой URL таксономии выглядел так: site.com/page/taxonomy_term

Как я могу этого достичь? Я написал код правила перезаписи WordPress в своем functions.php следующим образом:

function sphere_custom_rewrite_rules( $rules ){
    $newrules['(.+?)/([^/]*)/?'] = 'index.php?pagename=$matches[1]&positive_sphere=$matches[2]';
    $newrules['(.+?)/([^/]*)/?'] = 'index.php?pagename=$matches[1]&negative_sphere=$matches[2]';

    return $newrules + $rules;
}
add_filter('rewrite_rules_array', 'sphere_custom_rewrite_rules');

Страница не возвращает ошибку 404, но не выполняет мои функции в taxonomy.php, вместо этого выполняет мой код в файле template-page-name.php. Что я хочу, так это чтобы, когда я ввожу этот URL:

site.com/page/taxonomy_term, выполнялся мой код в taxonomy.php.

Буду признателен за любую помощь! Спасибо.

Вы можете использовать две встроенные функции WordPress, чтобы получить желаемый результат.

add_rewrite_tag() и add_rewrite_rule()

Есть пример, как использовать эти теги, чтобы получить желаемый результат примерно посередине этой страницы https://codex.wordpress.org/Rewrite_API/add_rewrite_rule.

Примечание: не забудьте сбросить ваши правила перезаписи.

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

Чтобы изменить структуру URL для вашей таксономии в WordPress, необходимо использовать функции add_rewrite_tag() и add_rewrite_rule(). Ваш текущий код не выполняет необходимую логику для обработки запросов, что может быть причиной того, что вместо обращения к файлу taxonomy.php, вызывается ваш шаблон template-page-name.php.

Ваша цель состоит в том, чтобы адрес страницы выглядел так: site.com/page/taxonomy_term, и при этом выполнялся код taxonomy.php. Ниже приведен подробный пример реализации этого функционала.

Шаг 1: Добавление Rewrite Tag и Rewrite Rule

Вам нужно добавить две функции в файл functions.php вашей темы. Первая — для регистрации пользовательского тега, вторая — для добавления правила перезаписи.

function sphere_custom_rewrite_tag() {
    // Регистрация пользовательского тега для таксономии
    add_rewrite_tag('%taxonomy_term%', '([^&]+)');
}
add_action('init', 'sphere_custom_rewrite_tag');

function sphere_custom_rewrite_rule() {
    // Добавление правила для обработки URL
    add_rewrite_rule('^page/([^/]*)/?', 'index.php?pagename=page&taxonomy_term=$matches[1]', 'top');
}
add_action('init', 'sphere_custom_rewrite_rule');

Шаг 2: Обработка запроса в taxonomy.php

Теперь вам нужно обработать переданный параметр taxonomy_term в файле taxonomy.php. Это позволит вам извлекать и отображать соответствующие термины в зависимости от URL.

if (get_query_var('taxonomy_term')) {
    $taxonomy_term = get_query_var('taxonomy_term');

    // Получаем объект термина таксономии
    $term = get_term_by('slug', $taxonomy_term, 'ваша_таксономия');

    if ($term) {
        // Логика отображения информации о термине
        // Например, вывод категории
        <h1><?php echo esc_html($term->name); ?></h1>
        // Дополнительная логика вывода контента
    } else {
        // Условие, если термин не найден
        // Здесь вы можете отображать сообщение об ошибке или рендерить 404
    }
}

Шаг 3: Сброс правил перезаписи

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

Заключение

Теперь, когда вы перейдете по адресу site.com/page/taxonomy_term, WordPress должен корректно обрабатывать запрос, перенаправляя его на taxonomy.php. Обязательно проверьте и протестируйте URL-адреса, чтобы убедиться, что функционал работает корректно и возвращает правильные термины таксономии.

Эта структура гарантирует, что ваш код будет соблюден по всем стандартам и требованиям SEO, обеспечивая удобство и предсказуемость для пользователей вашего сайта.

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

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