Пользовательские сообщения с одним и тем же слагом Перенаправляют на неправильный пост с одним и тем же слагом
У меня есть 2 сообщения пользовательского типа.Видеопост и Пост с путеводителем по городу Первый пост (Видеопост) содержит URL: 104.130.239.132/рик-Оуэнс/, а второй пост (Пост с путеводителем по городу) содержит URL: http://104.130.239.132/city-guide/rick-owens / (путеводитель по городу - это структурированная постоянная ссылка, которая является названием пользовательского типа сообщения). ТАКИМ образом, проблема возникает здесь всякий раз, когда мы пытаемся получить доступ к первому URL-адресу отображает шаблон и содержимое 2-го URL-адреса.2-й URL-адрес опубликован последним.Я попытался от себя решить проблему, отключив плагин Yoast Seo, который все еще не изменился, а также обновил свою постоянную ссылку, но все равно получил те же результаты.
Прикрепление SEO-фрагмента Yoast для первого URL-сообщения: и самый быстрый SEO-фрагмент второго URL-сообщения Любая помощь будет признательна, спасибо.
Дополнение:
Вот мои коды CPT.
1. Видеопосты :
$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 );
2. Посты путеводителя по городу:
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;
}
3 answers
Эта проблема действительно распространена, так как имя слага для двух типов сообщений похоже, будет отображаться то, которое является последним. Теперь это не отражается на типе сообщения. Я предполагаю, что вы выбрали "имя поста" или %имя поста% в структуре постоянных ссылок. Чтобы решить эту проблему, первый и самый простой способ - изменить заголовок одного из сообщений.
Другой способ - изменить структуру постоянных ссылок типа post из functions.php через функции класса перезаписи WordPress. К для этого вам нужно посмотреть ссылку под заголовком поста. Это связано с тем, что для определения слага типа записи конкретного пользовательского типа записи.
Я внедрил предоставленный вами код в свою локальную установку. Теперь у меня есть 2 пользовательских типа сообщений, как у вас, и сообщение на оба имени "рик Оуэнс", которое будет называться "рик-оуэнс". Во-первых, отображается та же ошибка, о которой говорилось выше.
Я решил эту проблему, добавив эту функцию в 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-адрес публикации должен быть таким:
Www.siteurl.com/rewrite/rick-owens
Для типа сообщения "Путеводитель по городу" URL-адрес сообщения должен быть таким:
Www.siteurl.com/city-guide/rick-owens
Если я не ошибаюсь, такая же структура ссылок должна быть и на вашей странице, таким образом, код должен работать, который я предоставил вверху. Если у вас есть ссылка, отличная от той, о которой я упоминал выше, то измените ее в соответствии с functions.php код, который я предоставил. Например, Если у вас есть пользовательский тип записи для видео,
Www.siteurl.com/video/rick-owens
Затем измените functions.php код для
$structure = 'video/%rewrite%';
См. img для проверки URL-адреса видео
Если у вас есть пользовательский тип сообщения для путеводителя по городу,
Www.siteurl.com/city_guide/rick-owens
$structure1 = 'city_guide/%rewrite%';
См. img для проверки URL-адреса путеводителя по городу
Это еще один вариант, который я обычно делаю, если в моем проекте возникает какой-либо конфликт, подобный вашему. Если вы этого не поняли, пожалуйста, упомяните меня в этом посте.
Надеюсь, это сработает.
Обновленный ответ, полученный в результате вашего обновленного процесса
Пожалуйста, используйте этот код для обновления типа вашего сообщения до ядра Wordpress функциональность
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 укажите пользовательскую структуру, такую как /%категория%/%имя сообщения%/, затем в своем первом посте для интервью обратите внимание на вкладку "Шестеренка" yoast seo? вы можете поместить /rick-owens/ в качестве канонического URL-адреса.