¿Por qué mis tipos de publicaciones personalizadas aparecen en el panel, pero no en mi sitio?

2

Agregué el siguiente código a mi archivo functions.php para crear un tipo de publicación personalizada.

  function create_post_type() {
      register_post_type( 'mysite_reviews',
          array(  
              'labels' => array(  
                  'name' => __( 'Reviews' ),
                  'singular_name' => __( 'Review' )
              ),  
          'public' => true,  
          'menu_position' => 5,  
          'rewrite' => array('slug' => 'reviews')
          )  
      );  
  }  

add_action( 'init', 'create_post_type' );

Luego creé una copia de mi archivo single.php llamado single-mysite_reviews.php.

Fui a mi panel de Wordpress y el tipo de publicación personalizada se estaba mostrando en mi menú. Creé una nueva publicación del nuevo menú y la publiqué. Cuando intenté ver esta nueva publicación, todo lo que pude obtener fue un error. O más específicamente, esta página: enlace

¿Qué estoy haciendo mal?

    
pregunta jkupczak 21.10.2011 - 12:58

2 respuestas

5

flush_rewrite_rules() tan pronto como registre el tipo de publicación personalizada. Parece que aún no se han reescrito, es decir, muy probablemente, por qué recibes un mensaje embarazoso.

register_post_type( 'mysite_reviews',
        array(  
            'labels' => array(  
                'name' => __( 'Reviews' ),
                'singular_name' => __( 'Review' )
            ),  
        'public' => true,  
        'menu_position' => 5,  
        'rewrite' => array('slug' => 'reviews')
    )
);
flush_rewrite_rules(); // <- do this only once!

Alternativamente, puedes ir a Configuración - > Enlaces permanentes - > Guarde los cambios, que se llaman en flush_rewrite_rules() para usted.

De hecho, enlace muestra tu publicación, lo que significa que simplemente no se está reescribiendo debido a la falta de la adecuada reglas, que aún no se han vaciado en la base de datos.

    
respondido por el soulseekah 21.10.2011 - 13:26
0

No estoy realmente seguro de lo que quieres lograr a partir de tu descripción pero, si quieres un tipo de publicación personalizada en el bucle, haz esto:

// Add the 'your_post_type' postype to the loop.
add_action('pre_get_posts', function(WP_Query $query){
    if(is_admin() or is_preview()){
        return;
    }
    // Only add them to the loop on Home/Front-Page
    if((is_home() or is_front_page()) and empty($query->query_vars['suppress_filters']){
        // This has to be an array so fix it if required
        $post_types = $query->get('post_type');
        if(empty($post_types)) $post_types = array('post');
        elseif(is_string($post_types)) $post_types = array($post_types);
        // Add one or more CPT-s to the loop here (merge old with new)
        $query->set('post_type', array_merge($post_types, array(
            'your_post_type',
            // 'another_post_type',
            // 'maybe_another_post_type',
    )));
    }
    return;
});

Los tipos de publicaciones personalizadas requieren un poco más de sintonización manual cuando los usas. No solo necesita habilitarlos, sino también enumerarlos o agregarlos al bucle, crear un archivo (o al menos vincularlo) .

PS : El código usa PHP 5.3+ Closures. Conviértase a PHP 5.2 usted mismo, como una tarea :)

    
respondido por el EarnestoDev 21.10.2011 - 13:16

Lea otras preguntas en las etiquetas