Intereting Posts
Как переключить css-файлы в соответствии с устройствами и нажать кнопку? почему wp_register_script не работает для register_activation_hook Рекомендации по регистрации пользователей в WordPress с фона MVC Почему редактор переформатирует мой код Поместите стробированный пункт меню Как я могу ограничить количество символов, используемых для описания в сетке категорий управления? Как показать липкие сообщения на статической главной странице, которая также содержит контент? Исключить сообщения с главной страницы с указанным тегом Пользовательские шаблоны не отображаются в раскрывающемся списке шаблонов Переменная MySQL в запросе GIT и URL-адрес разработки для производства отображать только wp_nav_menu, в котором есть элемент текущего меню image srcset возвращает false PHP, если оператор печатает параметры if Предполагается ли, что HyperDB может обрабатывать экземпляры базы данных только для чтения (только)?

Настраивать уникальные пули страниц во всех типах сообщений

У меня есть сайт со многими настраиваемыми типами сообщений, и мне нужна уникальная пуля для каждой страницы.

То, что я вижу, – это то, что WordPress проверяет только конфликты slug в типе сообщения перед добавлением «-2», «-3». Поэтому я могу иметь «actor / foo», «book / foo», «book / foo-2». Я не хочу этого. Я хочу, чтобы каждый foo имел свой собственный slug независимо от типа сообщения.

Я хочу избежать использования перезаписи на slug, и я бы предпочел не редактировать какой-либо источник WP вне плагинов / тем.

Это возможно?

Solutions Collecting From Web of "Настраивать уникальные пули страниц во всех типах сообщений"

Уникальный пул для сообщений выполняется с помощью wp_unique_post_slug() . Глядя на источник, возвращенный слизень фильтруется wp_unique_post_slug . Таким образом, мы можем заменить этот сгенерированный пул на свой собственный.

Вы заметите в источнике, что вложения необходимы для создания уникальных слизов во всех типах, поэтому мы просто используем код.

Примеры, которые вы дали, были неиерархическими – и неясно, хотите ли вы, чтобы слизняки были уникальными для типов иерархических сообщений (которые по умолчанию должны быть уникальными в своем дереве), поэтому в приведенном ниже примере я игнорирую иерархическую запись типы.

 add_filter('wp_unique_post_slug', 'wpse72553_cross_type_unique_slugs',10,5); function wpse72553_cross_type_unique_slugs( $slug, $post_ID, $post_status, $post_type, $post_parent ){ global $wpdb, $wp_rewrite; //Don't touch hierarchical post types $hierarchical_post_types = get_post_types( array('hierarchical' => true) ); if( in_array( $post_type, $hierarchical_post_types ) ) return $slug; if( 'attachment' == $post_type ){ //These will be unique anyway return $slug; } $feeds = $wp_rewrite->feeds; if ( ! is_array( $feeds ) ) $feeds = array(); //Lets make sure the slug is really unique: $check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND ID != %d LIMIT 1"; $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $slug, $post_ID ) ); if ( $post_name_check || in_array( $slug, $feeds) ) { $suffix = 2; do { $alt_post_name = substr ($slug, 0, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix"; $post_name_check = $wpdb->get_var( $wpdb->prepare($check_sql, $alt_post_name, $post_ID ) ); $suffix++; } while ( $post_name_check ); $slug = $alt_post_name; } return $slug; }