WP добавляет -2 к концу моего слога. Где хранятся оригиналы, чтобы я мог их удалить?

Вопрос или проблема

Я изучал таксономии, пользовательские записи и т. д., через много проб и ошибок. Наконец, я настроил все так, как хотел, однако теперь я сталкиваюсь с конфликтом желаемых слагов. Я не могу назвать свою категорию “venue”, потому что где-то в базе данных это уже занято (я предполагаю) – даже несмотря на то, что я удалил категорию, использовавшую его. Теперь, когда я пытаюсь добавить категорию, которую хочу использовать с слагом “venue”, WP автоматически называет ее “venue-2”, что я определенно не хочу видеть в своем URL в качестве папки. Какие-нибудь предложения по этому поводу?

Это также может быть вызвано загрузкой изображений с теми же именами файлов, что и записи/страницы. В моем случае я загрузил изображение под названием ‘careers.jpg’ до того, как создал страницу под названием ‘Careers’, и страница получала суффикс ‘-2’. Чтобы исправить это, я просто изменил слаг на изображении, и затем я смог изменить слаг на странице.

Слаг хранится в колонке post_name вашей таблицы posts. Я бы порекомендовал сначала проверить эту таблицу перед тем, как вручную назначать этот слаг.

Есть еще одна причина, по которой WordPress добавляет -2 в конце: когда слаг содержит только цифры. Это не допускается.

Пример: я хотел назвать свою страницу 2016, и даже несмотря на то, что в базе данных никогда не было 2016, слаг всегда превращался в 2016-2. Насколько я помню, это связано с тем, что цифры имеют специальное значение для WordPress (переменные пути), и их нельзя отличить.

Поэтому моим решением было вручную переименовать слаг в year-2016, что выглядит лучше, чем этот суффикс “-2”.

Обычно, когда WordPress добавляет “-2” к слагу, это означает, что у вас все еще есть старое содержимое, которое вы собирались удалить, в корзине. Убедитесь, что вы очистили свою корзину WordPress, а затем попробуйте снова сделать слаг.

Чтобы получить доступ к страницам в корзине, откройте меню Страницы / Все страницы, затем нажмите на раздел “Корзина”, который появляется справа от раздела “Все”. Обратите внимание, что если в корзине нет предметов, этот раздел не появится.

Мне удалось это сделать. Я использовал числовые слаги для пользовательских типов записей (CPT), но они автоматически получали суффикс -2. Например, example/test/2 преобразовывался в example/test/2-2. После некоторых исследований и тестирования мне удалось решить эту проблему, сохранив внимание к SEO. Вот решение, которое я реализовал:

Решение

Вот код, который я использовал для обработки числовых слагов в пользовательских типах записей без добавления суффикса -2:

function create_example_cpt() {
    $labels = array(
        'name' => 'Пример',
        'singular_name' => 'Пример',
        'add_new' => 'Добавить новый',
        'add_new_item' => 'Добавить новый элемент',
        'edit_item' => 'Редактировать элемент',
        'new_item' => 'Новый элемент',
        'all_items' => 'Все элементы',
        'view_item' => 'Просмотреть элемент',
        'search_items' => 'Поиск элементов',
        'not_found' => 'Элементы не найдены',
        'not_found_in_trash' => 'Элементы не найдены в корзине',
        'parent_item_colon' => 'Родительский элемент:',
        'menu_name' => 'Пример'
    );

    $args = array(
        'labels' => $labels,
        'public' => true,
        'hierarchical' => true,
        'supports' => array('title', 'editor', 'page-attributes'),
        'rewrite' => array(
            'slug' => 'example',
            'with_front' => false,
            'hierarchical' => true
        ),
        'has_archive' => true,
        'menu_position' => 5,
        'show_in_rest' => true,
    );

    register_post_type('example', $args);
}
add_action('init', 'create_example_cpt');


function custom_unique_slug($slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug) {
    global $wpdb;

    // Проверяем только CPT 'example' и числовые слаги
    if ( 'example' != $post_type || ! is_numeric( $original_slug ) || $slug === $original_slug ) {
        return $slug;
    }

    // Ищем существующие слаги, чтобы избежать конфликтов
    $post_name_check = $wpdb->get_var( $wpdb->prepare(
        "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND ID != %d AND post_parent = %d LIMIT 1",
        $original_slug, $post_type, $post_ID, $post_parent
    ) );

    // Если конфликтов нет, возвращаем оригинальный слаг
    if ( ! $post_name_check ) {
        return $original_slug;
    }

    // В противном случае возвращаем слаг с суффиксом
    return $slug;
}
add_filter( 'wp_unique_post_slug', 'custom_unique_slug', 10, 6 );

function custom_rewrite_rules($rules) {
    $new_rules = array(
        'example/([^/]+)/([^/]+)/?$' => 'index.php?post_type=example&name=$matches[2]',
        'example/([^/]+)/?$' => 'index.php?post_type=example&name=$matches[1]',
    );
    return $new_rules + $rules;
}
add_filter('rewrite_rules_array', 'custom_rewrite_rules');

Объяснение

  • create_example_cpt: Регистрирует пользовательский тип записи с поддержкой иерархии.
    Настройте эту функцию в соответствии с вашими конкретными потребностями.
  • custom_unique_slug: Обеспечивает сохранение числовых слагов без суффикса, если конфликты не обнаружены.
  • custom_rewrite_rules: Добавляет пользовательские правила перезаписи для поддержки желаемой структуры URL.

Заметки

  • Убедитесь, что вы обновили свои постоянные ссылки после добавления этого кода, чтобы новые правила перезаписи были применены.

С этим решением мои дочерние CPT не будут получать суффикс example/test/2-2, а будут сохраняться как example/test/2/. Они также будут правильно работать и отображаться, как и ожидалось, в картах сайта.

.

Ответ или решение

Вопрос о том, почему WordPress добавляет «-2» к концу вашего слога, является довольно распространенной темой среди пользователей, которые работают с таксономиями и пользовательскими типами записей. Давайте рассмотрим основные причины этого поведения, а также способы устранения проблемы и удаления старых слогов из базы данных.

Причины добавления «-2» к слогу

  1. Конфликт с существующими слогами: WordPress автоматически добавляет «-2», когда вы пытаетесь создать новый слог, который уже существует в базе данных. Это может происходить из-за ранее удаленных записей, которые все еще находятся в корзине, или из-за того, что вы уже имеете другую запись, использующую тот же слог.

  2. Слоги, состоящие только из чисел: WordPress обрабатывает слоги, состоящие только из чисел, иначе. Например, если вы пытаетесь создать страницу с названием «2016», WordPress добавит «-2» к концу, даже если такой слог никогда не существовал. Это связано с тем, что числовые слоги могут вызывать конфликты с другими функциями системы.

  3. Загруженные медиафайлы с тем же именем: Если вы загрузили изображение с тем же именем, что у страницы или категории, WordPress также добавит «-2» к слогу страницы или категории, чтобы избежать конфликта.

Где хранятся оригиналы слогов

Слоги в WordPress хранятся в столбце post_name таблицы posts базы данных. Чтобы устранить проблемы с конфликтующими слогами, вам следует выполнить следующие действия.

Шаги для удаления старых слогов

  1. Проверка корзины WordPress:

    • Перейдите в меню «Страницы» → «Все страницы» и проверьте, есть ли какие-либо записи в корзине. Если записи присутствуют, очистите корзину, чтобы удалить их навсегда. Это можно сделать, нажав на вкладку «Корзина» и выбрав пункт «Очистить корзину».
  2. Поиск в базе данных:

    • Для поиска существующих слогов вы можете использовать инструмент phpMyAdmin или любой другой интерфейс для работы с вашей базой данных. Выполните следующий SQL-запрос:
      SELECT * FROM wp_posts WHERE post_name = 'venue';
    • Это позволит вам узнать, имеются ли записи с таким слогом, и вы сможете их удалить, если они вам не нужны.
  3. Удаление старых записей:

    • Если вы нашли старые записи с конфликтующими слогами, вы можете удалить их с помощью SQL-запроса:
      DELETE FROM wp_posts WHERE post_name = 'venue';
    • Будьте осторожны при выполнении подобных запросов, так как это приведет к потере данных.
  4. Обновление постоянных ссылок:

    • После удаления конфликтных слогов вам следует обновить постоянные ссылки. Это можно сделать, зайдя в меню «Настройки» → «Постоянные ссылки» и просто нажав кнопку «Сохранить изменения». Это перезапустит правила перезаписи и уберет недействительные ссылки.

Решение по работе с числовыми слогами

Если вы используете числовые слоги и хотите избежать добавления «-2», вы можете использовать следующий код в вашем файле functions.php вашей темы:

function custom_unique_slug($slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug) {
    global $wpdb;

    if ('example' != $post_type || !is_numeric($original_slug) || $slug === $original_slug) {
        return $slug;
    }

    $post_name_check = $wpdb->get_var($wpdb->prepare(
        "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND ID != %d AND post_parent = %d LIMIT 1",
        $original_slug, $post_type, $post_ID, $post_parent
    ));

    if (!$post_name_check) {
        return $original_slug;
    }

    return $slug;
}
add_filter('wp_unique_post_slug', 'custom_unique_slug', 10, 6);

Заключение

Решение проблемы с добавлением «-2» к слогам в WordPress лежит в понимании причин конфликта, проверке существующих записей и правильном управлении слогами. Следуя описанным шагам, вы сможете успешно очистить базу данных от конфликтующих слогов и избежать их повторного появления в будущем. Не забудьте регулярно проверять свою базу данных и корзину, чтобы поддерживать порядок и улучшать SEO вашего сайта.

Оцените материал
Добавить комментарий

Капча загружается...