Почему мои страницы 404, когда я переписываю слаг моего настраиваемого типа записи? - PullRequest
1 голос
/ 14 апреля 2019

Я работаю с темой WordPress, которую я купил для стеклодувного бизнеса, и она предоставляет мне собственный тип поста, который называется «портфолио».

То, что я пытаюсь сделать, это переписать слаг этого пользовательского типа записи, чтобы он соответствовал типу продукта.

Если бы товар находился в категории «освещение», URL-адрес был бы domain.com/lighting/product-name

Если бы товар находился в категории "объект", URL был бы domain.com/objects/product-name

Я могу получить желаемую структуру постоянных ссылок для своих сообщений, добавив следующий код в файл functions.php моей дочерней темы, но когда я это сделаю, все остальные мои страницы (за исключением домашней страницы) вернут 404.

add_filter( 'register_post_type_args', 'dynamic_keep_product_slug', 10, 2 );
function dynamic_keep_product_slug( $args, $post_type ) {

    if ( 'portfolio' === $post_type ) {
        $my_args = array(
            'rewrite' => array( 'slug' => '%project-type%', 'with_front' => true ),
            'hierarchical' => true,
            'taxonomies' => array('category')
        );
        return array_merge( $args, $my_args );
    }

    return $args;
}

function keep_product_link( $post_link, $id = 0 ) {
    $post = get_post($id);
    $terms = wp_get_object_terms( $post->ID, 'project-type' );
    if( $terms ){
        return str_replace( '%project-type%' , $terms[0]->slug , $post_link );
    } else {
        return str_replace( '%project-type%' , 'products' , $post_link );
    }

    return $post_link;
}

add_filter( 'post_type_link', 'keep_product_link', 10, 2 );

Я далеко не эксперт, так может кто-нибудь сказать мне, где я ошибся здесь? Есть ли лучший способ дать этому типу поста несколько вариантов слагов?

1 Ответ

0 голосов
/ 15 апреля 2019

Возможно, вам придется (повторно) сохранить постоянные ссылки. После изменения таких вещей, как таксономия и слизни, вы получите 404, если вы этого не сделаете. Перейдите на панель инструментов WP и выберите «Настройки»> «Постоянные ссылки» и просто нажмите «Сохранить».

Кроме того, вы можете рассмотреть другой способ сделать это. Оставьте CPT без изменений и создайте для него категории, освещение, объекты и т. Д. Затем удалите фрагмент CPT из URL. Это будет сдерживать слизняков категории CPT, и это то, что вы хотите. Просто отметьте, что в этом случае у вас не может быть страниц или постов, чьи слагы начинаются с «портфолио», иначе могут возникнуть конфликты. Помимо того, что он работает нормально, я сделал это с woocommerce, скрывая слизня «продукта», но сохраняя слагов категорий

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...