Как можно реализовать на сайте WordPress возможность добавления или удаления таксономии из URL-адресов?

У меня есть работающий сайт на WordPress, где создан тип записи "recipe" со слагом 'recepty'. Кроме того, для данного типа записей зарегистрированы таксономии "recipe_category" со слагом 'recepty'. В результате URL постов выглядит следующим образом: recepty/post-name.

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

Теперь требуется добавить возможность вставлять таксономию в URL некоторых постов на выбор. Например, для поста под названием "Блины" создан чекбокс на ACF с названием add_to_path. Если чекбокс не установлен, то URL будет выглядеть как: recepty/bliny. Однако, если чекбокс активирован, URL должен измениться на: recepty/zavtraki/bliny.

Я уже попробовал найти решение в Интернете, но, к сожалению, либо информации нет, либо что-то было реализовано неправильно на предыдущих этапах. Можете подсказать, в каком направлении стоит двигаться для реализации этой задачи? 

<pre><code class="php">function type_recipe() {
    $recipe_args = array(
        'labels' => array(
            'name'          => __('Рецепты'),
            'singular_name' => __('Тимбилдинг'),
            'all_items'     => __('Все рецепты'),
            'add_new_item'  => __('Новый рецепт'),
            'add_new'       => __('Добавить рецепт'),
            'new_item'      => __('Новый рецепт'),
            'edit_item'     => __('Редактировать рецепт'),
            'update_item'   => __('Обновить рецепт'),
            'view_item'     => __('Просмотреть рецепт'),
            'view_items'    => __('Посмотреть все рецепты'),
            'search_items'  => __('Поиск рецептов'),
        ),
        'rewrite' => array(
            'slug'   
  • 5 сентября 2024 г. 17:23
Ответы на вопрос 2
Для реализации возможности добавления таксономии в URL определенных постов типа "recipe" на сайте WordPress, вам потребуется внести изменения в работу переопределения ссылок (URL rewriting) и, возможно, изменить логику получения URL для постов. Вот основные шаги для выполнения этой задачи:

### Шаг 1: Регистрация пользовательской таксономии и типа записи

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

```php
function type_recipe() {
    $recipe_args = array(
        'labels' => array(
            'name'          => __('Рецепты'),
            'singular_name' => __('Рецепт'),
            // Остальные метки...
        ),
        'public' => true,
        'has_archive' => true,
        'rewrite' => array('slug' => 'recepty/%recipe_category%'), // Обратите внимание на специальные метки
        'supports' => array('title', 'editor', 'thumbnail', 'custom-fields'),
    );
    register_post_type('recipe', $recipe_args);

    // Регистрация таксономии
    register_taxonomy('recipe_category', 'recipe', array(
        'hierarchical' => true,
        'labels' => array( /* ваши метки */ ),
        'rewrite' => array('slug' => 'zavtraki'), // Можно настроить по своему
    ));
}
add_action('init', 'type_recipe');
```

### Шаг 2: Обновление перезаписи URL

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

```php
function custom_recipe_link($post_link, $id) {
    $post = get_post($id);

    // Проверяем, что это нужный тип записи
    if ($post->post_type === 'recipe') {
        // Получаем значение чекбокса ACF
        $add_to_path = get_field('add_to_path', $post->ID);

        if ($add_to_path) {
            // Получаем термины таксономии
            $terms = get_the_terms($post->ID, 'recipe_category');
            if ($terms && !is_wp_error($terms)) {
                // Предполагаем, что берем первый термин для URL
                $term = reset($terms);
                return str_replace('%recipe_category%', $term->slug, $post_link);
            }
        } else {
            // Используем стандартный слаг
            return str_replace('%recipe_category%', '', $post_link);
        }
    }
    return $post_link;
}
add_filter('post_type_link', 'custom_recipe_link', 10, 2);
```

### Шаг 3: Обновление правил перезаписи

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

### Шаг 4: Проверка отображения URL

Теперь, при запросе URL ваших рецептов, если чекбокс `add_to_path` установлен и у поста есть ассоциированная таксономия, URL будет содержать слаг таксономии.

### Примечания

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

Эти шаги должны помочь вам добавить таксономию в URL для вашего пользовательского типа записи. Если у вас возникнут дополнительные вопросы или трудности, не стесняйтесь их задавать!
На нем зарегистрирован тип поста "recipe" со слагом recepty
Для этого типа поста зарегистрированы таксономии "recipe_category", которые так же имеют слаг "recepty"
...
В какую сторону копать?

В этом ключевая ошибка. И логическая и техническая. Делай разные слаги.
Похожие вопросы