Visualización del archivo de categorías de tipos de publicaciones personalizadas

4

Llego muy tarde a la fiesta sobre los Tipos de Publicaciones Personalizadas y solo comencé a usarlos muy recientemente, así que pido disculpas si mis preguntas parecen ridículas, pero parece que no puedo encontrar una respuesta a mi pregunta.

He configurado un tipo de publicación personalizada llamada actores con un par de valores de campo personalizados y (de manera crucial), estoy usando las categorías estándar para separar estos actores en hombres , mujeres y niños listados:

'taxonomies' => array('category', 'post_tag')

... ya que pensé que sería una forma mucho más limpia y ordenada de ... bueno, categorizar a los actores. Sin embargo, estoy completamente perplejo en cómo mostrar realmente estas categorías de cualquier forma, forma o forma.

Tengo un archivo archive-actors.php personalizado que muestra todos de los actores, pero quiero poder filtrarlos por categoría; p.ej. solo mostrar los hombres . Sin embargo, si creo que en una URL estándar como mysite.com/category/actors/men acabo de recibir

  

Lo sentimos, pero aún no hay publicaciones en la categoría Hombres.

Lo mismo sucede si simplemente intento mysite.com/category/men ; en ninguno de los dos casos, tampoco está utilizando la plantilla archive-actors.php .

¿Puede alguien ayudarme a despejar mi niebla de aburrimiento y señalarme en la dirección correcta para que pueda filtrar a estos molestos actores?

Editar:

Como @mrwweb alude a continuación (y olvidé mencionar que lo había intentado), se puede agregar lo siguiente al archivo functions.php :

function query_post_type($query) {
    $post_types = get_post_types();

    if ( is_category() || is_tag()) {

        $post_type = get_query_var('actors');

        if ( $post_type ) {
            $post_type = $post_type;
        } else {
            $post_type = $post_types;
        }

        $query->set('post_type', $post_type);

        return $query;
    }
}

add_filter('pre_get_posts', 'query_post_type');

... como se hace referencia aquí que hace work, en la medida en que mostrará mis tipos de publicaciones personalizadas categorizadas en la página normal archive.php , pero no utiliza mi archive-actors.php , que es la clave.

    
pregunta indextwo 04.07.2012 - 17:24

3 respuestas

3

Puede forzar el uso de su plantilla para categorías con el filtro category_template :

function wpa57439_category_template( $templates = '' ){
    if( !is_array( $templates ) && !empty( $templates ) ) {
        $templates = locate_template( array( 'archive-actors.php', $templates ), false );
    } 
    elseif( empty( $templates ) ) {
        $templates = locate_template( 'archive-actors.php', false );
    }
    else {
        $new_template = locate_template( array( 'archive-actors.php' ) );
        if( !empty( $new_template ) ) array_unshift( $templates, $new_template );
    }
    return $templates;
}
add_filter( 'category_template', 'wpa57439_category_template' );

adaptado de Jerarquía de filtros en códice.

    
respondido por el Milo 04.07.2012 - 18:49
0

Ese es el comportamiento esperado de los archivos de categorías. Como se encuentra aquí en los foros de Soporte, el siguiente fragmento de código debe resolver su problema (solo cambie "artículo" a su tipo de publicación):

add_filter('pre_get_posts', 'query_post_type');
function query_post_type($query) {
  if(is_category() || is_tag()) {
    $post_type = get_query_var('post_type');
    if($post_type)
        $post_type = $post_type;
    else
        $post_type = array('post','articles','nav_menu_item');
    $query->set('post_type',$post_type);
    return $query;
    }
}

ACTUALIZACIÓN: Gah. Agarré el fragmento equivocado. Quería usar este.

    
respondido por el mrwweb 04.07.2012 - 17:34
0

Alternativamente, lo que puedes hacer es agregar una nueva regla wp_rewrite para crear una nueva estructura de URL para mostrar solo las publicaciones en un cpt y categoría dados. Algo como el .gist que publiqué aquí:

[editar: no puedo incrustar .gists así que aquí está el código y linky ]

/**
* This could be extrapolated and used for tags or any other taxonomy really.
*/

add_action('init', 'category_cpt_rewrites');

function category_cpt_rewrites() {
    $custom_post_types = array('video', 'audio', 'photo', 'file'); //some example post types
    foreach ( $custom_post_types as $post_type ) {
        $rule = '^' . $post_type . '/category/(.+?)/?$';
        $rewrite = 'index.php?post_type=' . $post_type . '&category_name=$matches[1]';
        add_rewrite_rule($rule,$rewrite,'top');
    }
}

//make sure you flush rules
//this will take the following url structure (video cpt as an example, and politics as a category example) -> video/category/politics and return posts belonging to the politics category that are in the "video" custom post type.

//note that if you want this to be truly effective you'll want to make a custom "the_category()" or similar template function to return the correct url structure for a category list belonging to a custom post type post.
    
respondido por el Darren 28.10.2012 - 18:59

Lea otras preguntas en las etiquetas