У меня есть 2 сообщения типа Post Post. Видео-сообщение и руководство по городу. Первое сообщение (видео-сообщение) содержит URL-адрес: 104.130.239.132/rick-owens/ и второй пост (City-Guide Post) conatins url: http: //104.130.239.132/city-guide/rick-owens/ (city-guide – это постоянная ссылка, которая является названием персонализированного типа сообщения). SO проблема возникает здесь всякий раз, когда мы пытаемся получить доступ к первому URL-адресу, он отображает шаблон и содержимое второго URL-адреса. Второй URL-адрес опубликован последним. Я попытался от себя решить, отключив плагин Yoast Seo, по-прежнему не изменился, а также сделал свою постоянную ссылку обновленные все же получили одинаковые результаты.
Прикрепление Yoast SEO-фрагмента для первого URL-адреса: и Yoast SEO-фрагмент второго URL-адреса Любая помощь будет оценена, спасибо.
Дополнение:
Вот мои коды CPT.
1.Video Сообщений:
$labels = array( 'name' => _x( 'Videos', 'Post Type General Name', 'roots' ), 'singular_name' => _x( 'Video', 'Post Type Singular Name', 'roots' ), 'menu_name' => __( 'Video Posts', 'roots' ), 'parent_item_colon' => __( 'Parent Video:', 'roots' ), 'all_items' => __( 'All Videos', 'roots' ), 'view_item' => __( 'View Video', 'roots' ), 'add_new_item' => __( 'Add New Video', 'roots' ), 'add_new' => __( 'Add New', 'roots' ), 'edit_item' => __( 'Edit Video', 'roots' ), 'update_item' => __( 'Update Video', 'roots' ), 'search_items' => __( 'Search Video', 'roots' ), 'not_found' => __( 'Not found', 'roots' ), 'not_found_in_trash' => __( 'Not found in Trash', 'roots' ), ); $rewrite = array( 'slug' => 'rewrite', 'with_front' => true, 'pages' => true, 'feeds' => true, ); $args = array( 'label' => __( 'video', 'roots' ), 'description' => __( 'Videos Post Type', 'roots' ), 'labels' => $labels, 'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'trackbacks', 'revisions', 'custom-fields', ), 'taxonomies' => array( 'category', 'post_tag' ), 'hierarchical' => false, 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => true, 'show_in_admin_bar' => true, 'menu_position' => 5, 'can_export' => true, 'has_archive' => true, 'exclude_from_search' => false, 'publicly_queryable' => true, 'rewrite' => $rewrite, 'capability_type' => 'post', 'yarpp_support' => TRUE ); register_post_type( 'video', $args );
Сообщений:
function register_post_types(){ register_post_type( 'city-guide', [ 'has_archive' => TRUE, 'hierarchical' => TRUE, 'labels' => [ 'name' => 'City Guide' ], 'public' => TRUE, 'supports' => ['editor', 'page-attributes', 'revisions', 'thumbnail', 'title','custom-fields','excerpt'], 'taxonomies' => array('post_tag') ] ); add_image_size( 'ipad-city-thumb', 650, 650, TRUE ); } add_action( 'init', __NAMESPACE__.'\register_post_types', 20 );
У меня есть это в моем коде
remove /rewrite/ slug from custom permalinks, to allow domain/slug for all post types public function post_link_rewrite( $post_link, $post, $leavename ){ $post_link = str_replace( '/rewrite/', '/', $post_link ); return $post_link; }
Эта проблема очень распространена, так как имя слива двух типов сообщений аналогично, будет отображаться тот, который является последним. Теперь он не отражает тип сообщения. Я предполагаю, что вы выбрали «post-name» или% postname% в структуре permalink. Чтобы решить эту проблему, первым и самым простым способом является изменение столбца сообщения одного из сообщений.
Другим является изменение структуры permalink типа post из функции functions.php путем перезаписи функций класса WordPress. Для этого вам нужно посмотреть ссылку ниже заголовка сообщения. Это связано с тем, что для выяснения пули почтового типа конкретного пользовательского типа сообщения.
Я выполнил ваш предоставленный код в моей локальной установке. Теперь у меня есть 2 пользовательских типа сообщений, как у вас, так и почта в обоих именах «rick owens», в котором slug будет «rick-owens». Во-первых, та же ошибка отображается как упомянутая.
Я решил эту проблему, добавив эту функцию в functions.php
function add_rewrite_rules_custom_post(){ global $wp_rewrite; $structure = 'rewrite/%rewrite%'; $structure1 = 'city-guide/%city-guide%'; $wp_rewrite->add_permastruct('%rewrite%', $structure, false); $wp_rewrite->add_permastruct('%city-guide%', $structure1, false); } add_action('init', 'add_rewrite_rules_custom_post');
Над этим кодом работал для меня и тестировался и должен работать и на вас.
Как я уже упоминал, вы должны знать URL-адрес сообщения на странице редактирования этого конкретного сообщения.
Для типа персонализированного видеорекламы почтовый URL должен выглядеть следующим образом:
http://www.siteurl.com/rewrite/rick-owens
Для типа почтового адреса, почтовый URL должен выглядеть следующим образом:
http://www.siteurl.com/city-guide/rick-owens
Если я прав, та же структура ссылок также должна быть на вашей странице, поэтому код должен работать, который я предоставил в верхней части. Если у вас есть другие, чем упомянутые выше ссылки, измените их в коде functions.php, который я предоставил. Например, если у вас есть для типа персонализированного видео,
http://www.siteurl.com/video/rick-owens
Затем измените код functions.php на
$structure = 'video/%rewrite%';
см. img для проверки URL-адреса видео
Если у вас есть тип персонализированного почтового маршрута,
http://www.siteurl.com/city_guide/rick-owens
$structure1 = 'city_guide/%rewrite%';
см. img для проверки URL-адреса города
Это еще один вариант, который я обычно делаю, если какой-либо конфликт происходит так же, как ваш в моем проекте. Если у вас его нет, пожалуйста, напишите мне об этом.
Надеюсь, это сработает.
Обновлен ответ от вашего обновленного процесса
Используйте этот код для обновления типа сообщения для функциональности WordPress Core
function update_parse_request( $query ) { if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) { return; } if ( ! empty( $query->query['name'] ) ) { $query->set( 'post_type', array( 'post', 'page', 'video', 'rewrite' ) ); } } add_action( 'pre_get_posts', 'update_parse_request' );
Надеюсь, этот код будет работать для вас, и, пожалуйста, удалите код, как я упоминал ранее выше, и не забудьте обновить постоянную ссылку.
Спасибо
ПРИМЕЧАНИЕ. Не забудьте обновить постоянную ссылку после того, как вы поместили код в functions.php
Обновить код типа почтового индекса с нижеприведенным кодом и, если возможно, использовать тот же код для типа почтового адреса города
$labels = array( 'name' => _x( 'Videos', 'Post Type General Name', 'roots' ), 'singular_name' => _x( 'Video', 'Post Type Singular Name', 'roots' ), 'menu_name' => __( 'Video Posts', 'roots' ), 'parent_item_colon' => __( 'Parent Video:', 'roots' ), 'all_items' => __( 'All Videos', 'roots' ), 'view_item' => __( 'View Video', 'roots' ), 'add_new_item' => __( 'Add New Video', 'roots' ), 'add_new' => __( 'Add New', 'roots' ), 'edit_item' => __( 'Edit Video', 'roots' ), 'update_item' => __( 'Update Video', 'roots' ), 'search_items' => __( 'Search Video', 'roots' ), 'not_found' => __( 'Not found', 'roots' ), 'not_found_in_trash' => __( 'Not found in Trash', 'roots' ), ); $args = array( 'labels' => $labels, 'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'trackbacks', 'revisions', 'custom-fields', ), 'taxonomies' => array( 'category', 'post_tag' ), 'hierarchical' => false, 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => true, 'show_in_admin_bar' => true, 'menu_position' => 5, 'can_export' => true, 'has_archive' => true, 'exclude_from_search' => false, 'publicly_queryable' => true, 'query_var' => true, 'rewrite' => true, 'capability_type' => 'post', 'yarpp_support' => TRUE ); register_post_type( 'video', $args );
в настройке постоянных ссылок в WordPress, поставьте пользовательскую структуру, например /% category% /% postname% /, затем в своем первом интервью вы заметите вкладку передач yoast seo. вы можете поместить / rick-owens / как канонический URL.