Пользовательские сообщения с одним и тем же слагом Перенаправляют на неправильный пост с одним и тем же слагом


У меня есть 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-сообщения: enter image description here и самый быстрый SEO-фрагмент второго URL-сообщения enter image description here Любая помощь будет признательна, спасибо.

Дополнение:

Вот мои коды 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;
    }
Author: Melvin, 2017-02-10

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

 1
Author: Mohammad Ashique Ali, 2017-02-15 12:27:09

Обновите код типа записи в реестре с помощью кода ниже и, если возможно, используйте тот же код для типа записи в путеводителе по городу

$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 );
 2
Author: Ash Patel, 2017-02-14 17:42:20

В настройках постоянных ссылок Wordpress укажите пользовательскую структуру, такую как /%категория%/%имя сообщения%/, затем в своем первом посте для интервью обратите внимание на вкладку "Шестеренка" yoast seo? вы можете поместить /rick-owens/ в качестве канонического URL-адреса.

 -1
Author: Allen, 2017-02-15 13:56:09