Página de tipo de publicación personalizada única que redirige a la página 404

2

He declarado el tipo de publicación de la siguiente manera:

 $args = array(
        'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'query_var' => true,
        'rewrite' => array('slug' => 'agences'),
        'capability_type' => 'post',
        'has_archive' => true,
        'hierarchical' => false,
        'menu_position' => 5,
        'taxonomies' => array('brands', 'country'),
        'supports' => array('title', 'editor', 'author', 'thumbnail', 'custom-fields')
    );

    register_post_type('destinations', $args);

Inicialmente pude acceder a una sola página de este tipo de publicación usando single-agences.php pero ahora está redirigiendo a 404.

He comprobado otras respuestas y encontré que es un error común, pero otras respuestas no pudieron resolverlo. Cualquier ayuda será maravillosa.

    
pregunta Deepak jha 07.03.2016 - 15:23

2 respuestas

0

Se debió a un complemento "Eliminar la babosa de la base de taxonomía". Estaba en conflicto con el slug base de CPT "destinos". Tuve que usar add_rewrite_rule para verificar si había slug y redirigirlo manualmente a la ubicación correcta

    
respondido por el Deepak jha 06.07.2017 - 06:51
9

El CPT recién registrado muestra 404 porque, el register_post_type() no elimina las reglas de reescritura. Así que depende de ti, si quieres hacerlo de forma manual o automática.

Manualmente:

Vaya a /wp-admin/ , luego a Configuración »Permalinks, y luego presione el botón Guardar cambios para eliminar las reglas de reescritura.

Automáticamente:

Puede vaciar las reglas de reescritura utilizando la función flush_rewrite_rules() . Pero como register_post_type() se llama en init hook, disparará cada vez que se disparará init hook. Lo mismo dice el códice también:

  

Esta función es útil cuando se usa con tipos de publicaciones personalizadas, ya que permite el vaciado automático de las reglas de reescritura de WordPress (por lo general, debe hacerse manualmente para los nuevos tipos de publicaciones personalizadas). Sin embargo, esta es una operación costosa , por lo que solo debe usarse cuando sea absolutamente necesario.

Es por eso que es mejor enganchar la cosa a algo que se dispara una vez, y que las reglas de descarga solo son necesarias. Como @cybmeta ya te lo mostró . Pero también puedes seguir el enfoque de @ bainternet:

/**
 * To activate CPT Single page
 * @author  Bainternet
 * @link http://en.bainternet.info/2011/custom-post-type-getting-404-on-permalinks
 * ---
 */
$set = get_option( 'post_type_rules_flased_mycpt' );
if ( $set !== true ){
    flush_rewrite_rules( false );
    update_option( 'post_type_rules_flased_mycpt', true );
}

Él está guardando un valor en la tabla options solo para tu tipo de publicación. Y si el valor no está allí, está volviendo a escribir las reglas. Si está allí, no lo está haciendo.

Pero tenga en cuenta que en realidad está haciendo una llamada a la base de datos cada vez (si no se almacena en caché). Por lo tanto, prefiero enganchar el código after_setup_theme para el tema, o register_activation_hook para el complemento.

Bonus

Al depurar las reglas de reescritura, este tipo de complemento podría ser muy útil:

respondido por el Mayeenul Islam 07.03.2016 - 16:11

Lea otras preguntas en las etiquetas