Страница начинается с числа, WordPress добавляет 2

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

Сначала я думал, что схожу с ума, а потом, после дополнительной диагностики, оказалось, что это не так!

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

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

Тогда я решил: ладно, давайте отключим мою тему (включил стандартную тему WordPress) и плагины, чтобы изолировать проблему… проблема оставалась.

В корзине ничего нет, нет совпадающих названий постов или страниц (даже изображений)

Наконец, я подумал: дай-ка попробую это на другом сайте – другие изображения, другая тема, другие плагины, все другое… проблема осталась.

Так что теперь я думаю, что это проблема WordPress. Есть ли способ это исправить?

В основном, чтобы воспроизвести, попробуйте создать страницу, которая начинается с числа – это может быть 2005, 1999 или 2017 – единственное, что я заметил, это то, что она должна начинаться с числа.

Я что-то упустил?

В функции wp_unique_post_slug выполняются проверки, чтобы “предотвратить создание новых слагов постов, которые могут привести к конфликту URL с архивами дат.” Вот соответствующий код с 3812 строки из wp-includes/post.php

    // Предотвращение создания новых слагов постов, которые могут привести к конфликту URL с архивами дат.
    $post = get_post( $post_ID );
    $conflicts_with_date_archive = false;
    if ( 'post' === $post_type && ( ! $post || $post->post_name !== $slug ) && preg_match( '/^[0-9]+$/', $slug ) && $slug_num = intval( $slug ) ) {
        $permastructs   = array_values( array_filter( explode( "https://wordpress.stackexchange.com/", get_option( 'permalink_structure' ) ) ) );
        $postname_index = array_search( '%postname%', $permastructs );

        /*
         * Потенциальные конфликты с датами следующие:
         *
         * - Любое целое число в первой позиции permastruct может быть годом.
         * - Целое число от 1 до 12, следующее за "годом", конфликтует с "monthnum".
         * - Целое число от 1 до 31, следующее за "monthnum", конфликтует с "day".
         */
        if ( 0 === $postname_index ||
            ( $postname_index && '%year%' === $permastructs[ $postname_index - 1 ] && 13 > $slug_num ) ||
            ( $postname_index && '%monthnum%' === $permastructs[ $postname_index - 1 ] && 32 > $slug_num )
        ) {
            $conflicts_with_date_archive = true;
        }
    }

Большое спасибо за правильный код.

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

Проблема, которую вы описываете, связана с тем, как WordPress обрабатывает создаваемые вами "пост-слуги" (slugs) для страниц и постов. Когда вы создаете страницу с названием, начинающимся с числа, WordPress добавляет "-2" к окончанию, чтобы избежать конфликтов с путями к архивам дат. Это механизм, встроенный в платформу для предотвращения случаев, когда URL может пересекаться с записями архивов, которые могут содержать только цифры.

Согласно коду функции wp_unique_post_slug, который вы уже нашли, система проверяет, не возникнет ли конфликт с архивами дат. Конфликт возникает, если "пост-слуга" (slug), который вы пытаетесь создать, представляет собой только цифры, которые могут потенциально соответствовать годам, месяцам или дням в URL-структуре, и, соответственно, это приводит к добавлению "-2" к названию.

Для решения данной проблемы вы можете рассмотреть следующие варианты:

  1. Добавление префикса или суффикса к названию страницы: Например, вместо того чтобы называть страницу "2017", попробуйте "год-2017" или "2017-гид". Это позволит избежать конфликта с системой обработки дат в WordPress.

  2. Изменение структуры постоянных ссылок (постоянных урлов): Если это возможно, вы можете попробовать изменить структуру постоянных ссылок в настройках WordPress, чтобы они не включали %year%, %monthnum% и %day%. Это может помочь устранить конфликты, но может повлиять на другие URL на вашем сайте.

  3. Использование плагина: Если вам нужно сохранить названия страниц, начинающиеся с цифр, вы можете поискать плагины, которые обеспечивают расширенные настройки управления URL и могут позволить вам создавать уникальные "пост-слуги" без конфликтов.

  4. Изменение подхода к именованию: Возможно, стоит рассмотреть возможность использования названий, которые содержат буквы и числа, чтобы избежать проблем с конфликтами.

  5. Открытие запроса в поддержку WordPress: Если это критично для вашего сайта, вы также можете обратиться к сообществу WordPress или открыть запрос на исправление в официальную поддержку, чтобы узнать, можно ли изменить это поведение на уровне кода WordPress.

Надеюсь, это поможет тебе разобраться с проблемой! Если возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.

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

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