Babosa numérica en una publicación infantil

Entiendo que hay dos tipos diferentes cuando se trata de un tipo de publicación personalizada: -página -post.

Donde la página admite páginas secundarias, y la publicación no.

Sin embargo, cuando bash hacer una página secundaria con solo números en su slug, wordpress coloca -2 detrás de ella. Ejemplo:

/ posttype / parent / 10-2 /

en lugar de lo que hubiera querido:

/ posttype / parent / 10 /

¿Por qué es esto y cómo puedo resolverlo? He buscado durante horas, pero parece que no puedo encontrar una solución, aparte de que tal vez sea una limitación en WordPress, lo que hace un conflicto con su sistema de enlace permanente de fecha. No estoy usando este sistema, pero ¿podría ser cierto?

EDITAR, algo más de información: no hay publicaciones que puedan entrar en conflicto con mi enlace permanente. El enlace permanente definitivamente no se toma.

Obtengo este comportamiento con una instalación completamente nueva de wordpress, y solo 1 tipo de publicación personalizada. Las únicas publicaciones en la base de datos de wordpress son ‘parent’ y ’02’. Donde ’02’ se convierte en ’02 -2 ‘.

Me preguntaba si quizás la paginación / slug / page / 02 fue tal vez la razón por la cual las babosas numéricas no fueron aceptadas.

Es importante tener en cuenta que solo obtengo esto con las barras numéricas, / parent / child / no es un problema.

He visto algo sobre anular los filtros, pero ¿no será eso lo que ocultaría? Prefiero resolverlo.

El código que uso para registrar mi tipo de publicación personalizada:

$labels = array( 'name' => _x( $options['euthus_posttype_meervoud'], 'Post Type General Name', 'text_domain' ), 'singular_name' => _x( $options['euthus_posttype'], 'Post Type Singular Name', 'text_domain' ), 'menu_name' => __( $options['euthus_posttype_meervoud'], 'text_domain' ), 'name_admin_bar' => __( $options['euthus_posttype_meervoud'], 'text_domain' ), 'parent_item_colon' => __( 'Parent Item:', 'text_domain' ), 'all_items' => __( 'All Items', 'text_domain' ), 'add_new_item' => __( 'Add New Item', 'text_domain' ), 'add_new' => __( 'Add New', 'text_domain' ), 'new_item' => __( 'New Item', 'text_domain' ), 'edit_item' => __( 'Edit Item', 'text_domain' ), 'update_item' => __( 'Update Item', 'text_domain' ), 'view_item' => __( 'View Item', 'text_domain' ), 'search_items' => __( 'Search Item', 'text_domain' ), 'not_found' => __( 'Not found', 'text_domain' ), 'not_found_in_trash' => __( 'Not found in Trash', 'text_domain' ), ); $rewrite = array( 'slug' => $options['euthus_posttype_baseurl'], 'with_front' => true, 'pages' => false, 'feeds' => true, ); $args = array( 'label' => __( 'euthus_childs', 'text_domain' ), 'description' => __( $options['euthus_posttype_meervoud'], 'text_domain' ), 'labels' => $labels, 'supports' => array( 'title', 'thumbnail', 'page-attributes',), 'hierarchical' => true, 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'menu_position' => 20, 'menu_icon' => 'dashicons-networking', 'show_in_admin_bar' => true, 'show_in_nav_menus' => true, 'can_export' => true, 'has_archive' => true, 'exclude_from_search' => false, 'publicly_queryable' => true, 'rewrite' => $rewrite, 'capability_type' => 'page', ); register_post_type( 'euthus_childs', $args ); 

Según tengo entendido, el ‘tipo_capacidad’ debe establecerse en la página y no publicar para permitir el jerárquico, donde establecerlo en ‘publicar’ no lo permite.

Solutions Collecting From Web of "Babosa numérica en una publicación infantil"

Como ya adivinó y @Rarst sospechó, hay una comprobación de paginación en wp_unique_post_slug() para los tipos de publicaciones jerárquicas:

 preg_match( "@^($wp_rewrite->pagination_base)?\d+$@", $slug ) 

que coincidirá con cualquier slug numérico, opcionalmente precedido por “página”. Para evitar esto, podría usar el filtro 'wp_unique_post_slug' , básicamente replicando el código original sin la verificación de paginación, por ejemplo

 add_filter( 'wp_unique_post_slug', function ( $slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug ) { if ( $slug !== $original_slug && is_post_type_hierarchical( $post_type ) ) { global $wpdb, $wp_rewrite; $slug = $original_slug; // Undo any previous processing. // The following is just a copy & paste of the WP code without the pagination check. $feeds = $wp_rewrite->feeds; if ( ! is_array( $feeds ) ) $feeds = array(); if ( 'nav_menu_item' == $post_type ) return $slug; /* * Page slugs must be unique within their own trees. Pages are in a separate * namespace than posts so page slugs are allowed to overlap post slugs. */ $check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_type IN ( %s, 'attachment' ) AND ID != %d AND post_parent = %d LIMIT 1"; $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $slug, $post_type, $post_ID, $post_parent ) ); /** * Filter whether the post slug would make a bad hierarchical post slug. * * @since 3.1.0 * * @param bool $bad_slug Whether the post slug would be bad in a hierarchical post context. * @param string $slug The post slug. * @param string $post_type Post type. * @param int $post_parent Post parent ID. */ if ( $post_name_check || in_array( $slug, $feeds ) || apply_filters( 'wp_unique_post_slug_is_bad_hierarchical_slug', false, $slug, $post_type, $post_parent ) ) { $suffix = 2; do { $alt_post_name = _truncate_post_slug( $slug, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix"; $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $alt_post_name, $post_type, $post_ID, $post_parent ) ); $suffix++; } while ( $post_name_check ); $slug = $alt_post_name; } } return $slug; }, 10, 6 ); 

Sería más correcto decir que los CPT pueden ser jerárquicos y no jerárquicos. La página y la publicación son solo ejemplos respectivos de estos y, por cierto, como tipos de publicaciones nativas, no son exactamente lo mismo que los CPT.

Claramente, cuando tiene múltiples CPT en un sitio, es importante que ni una sola combinación de babosas conduzca a un enlace permanente ambiguo , que podría referirse a más de una publicación.

Cuando WP genera babosas de publicación, wp_unique_post_slug() comprueba y modifica babosas según sea necesario para lograr eso.

Es difícil adivinar con certeza por qué su babosa específica se modifica, sin ver el rest de los datos.

En una palabra:

  • WP lo considera insuficientemente único
  • hay filtros que le permiten anular este comportamiento
  • sin embargo, la aplicación de babosas no únicas podría explotar de maneras interesantes