@kate_sochi

Можно ли добавить на сайт вордпресс возможность добавлять или убирать таксономию в url?

Есть действующий сайт на вордпресс
На нем зарегистрирован тип поста "recipe" со слагом recepty
Для этого типа поста зарегистрированы таксономии "recipe_category", которые так же имеют слаг "recepty"
URL поста выглядит так: recepty/post-name

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

Необходимо сделать возможность добавлять таксономию в url некоторых постов по выбору

К примеру, есть пост "Блины"
Для него создан чекбокс на ACF - add_to_path
Если чекбокс пуст, то url выглядит так: recepty/блины
Но если чекбокс отмечен, то url становится: recepty/завтраки/блины

Весь интернет обрыт, или решения нет, или что-то было сделано не так на предыдущих этапах
В какую сторону копать?

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'       => 'recepty',
            'with_front' => false
        ),
        'supports'        => array('title', 'editor', 'thumbnail', 'custom-fields'),
        'public'          => true,
        'has_archive'     => true,
        'show_in_menu'    => true,
        'menu_position'   => 20,
        'menu_icon'       => 'dashicons-groups',
        'capability_type' => 'page',
        'taxonomies'      => array( 'recipe_category'),
    );
    register_post_type('recipe', $recipe_args);

    $labels = array(
        'name'              => _x('Категории рецептов', 'taxonomy general name'),
        'singular_name'     => _x('Категория рецепта', 'taxonomy singular name'),
        'search_items'      => __('Поиск категории'),
        'all_items'         => __('Все категории'),
        'parent_item'       => __('Родительская категория'),
        'parent_item_colon' => __('Родительская категория:'),
        'edit_item'         => __('Изменить категорию'), 
        'update_item'       => __('Обновить категорию'),
        'add_new_item'      => __('Добавить новую категорию'),
        'new_item_name'     => __('Имя новой категории'),
        'menu_name'         => __('Категории рецептов'),
    );

    $taxonomy_args = array(
        'hierarchical'      => false,
        'labels'            => $labels,
        'show_ui'           => true,
        'show_tagcloud' => false,
        'show_admin_column' => true,
        'query_var'         => true,
        'meta_box_cb'       => 'post_categories_meta_box',
        'rewrite' => array(
            'slug'       => 'recepty',
            'with_front' => false
        ),
    );
    register_taxonomy('recipe_category', array('recipe'), $taxonomy_args);
}
add_action('init', 'type_recipe');



function generate_taxonomy_rewrite_rules( $wp_rewrite ) {
    $rules = array();
    $post_types = get_post_types( array( 'name' => 'recipe', 'public' => true, '_builtin' => false ), 'objects' );
    $taxonomies = get_taxonomies( array( 'name' => 'recipe_category', 'public' => true, '_builtin' => false ), 'objects' );
    foreach ( $post_types as $post_type ) {
        $post_type_name = $post_type->name;
        $post_type_slug = $post_type->rewrite['slug'];

        foreach ( $taxonomies as $taxonomy ) {
            if ( $taxonomy->object_type[0] == $post_type_name ) {
                $terms = get_categories( array( 'type' => $post_type_name, 'taxonomy' => $taxonomy->name, 'hide_empty' => 0 ) );
                foreach ( $terms as $term ) {
                    $rules[$post_type_slug . '/' . $term->slug . '/?$'] = 'index.php?' . $term->taxonomy . '=' . $term->slug;
                    $rules[$post_type_slug . '/' . $term->slug . '/page/?([0-9]{1,})/?$'] = 'index.php?' . $term->taxonomy . '=' . $term->slug . '&paged=' . $wp_rewrite->preg_index( 1 );
                }
            }
        }
    }
    $wp_rewrite->rules = $rules + $wp_rewrite->rules;
}
add_action('generate_rewrite_rules', 'generate_taxonomy_rewrite_rules');
  • Вопрос задан
  • 38 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Refguser
Делаю ИМ и другие решения
На нем зарегистрирован тип поста "recipe" со слагом recepty
Для этого типа поста зарегистрированы таксономии "recipe_category", которые так же имеют слаг "recepty"
...
В какую сторону копать?

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы