2011-02-09 30 views
6

Hey. Estoy usando un tipo de publicación personalizado en wordpress. Cómo registro esta costumbre tipo post como este:categorías de tipo de publicación personalizada de Wordpress

 register_post_type("lifestream", array(
      'label' => 'Lifestream', 
      'public' => true, 
      'hierarchical' => true, 
      'menu_position' => 5, 
      'supports' => array('title','editor','author','thumbnail','comments','custom-fields'), 
      'taxonomies' => array('category','post_tag'), 
      'query_var' => true, 
      'publicly_queryable' => true, 
      'exclude_from_search' => false, 
      'caller_get_posts' => 1 

     )); 
     register_taxonomy_for_object_type('category', 'lifestream'); 
     register_taxonomy_for_object_type('post_tag', 'lifestream'); 

En el tema (la plantilla circular) me gusta combinar postes y mi tipo de mensaje personalizado, por que estoy usando query_posts() con estos parámetros:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
$args = array(
    'post_type' => array('post', 'lifestream'), 
    'paged' => $paged, 
    'cat' => $wp_query->get('cat'), 
    'tag' => $wp_query->get('tag'), 
    'year' => $wp_query->get('year'), 
    'monthnum' => $wp_query->get('monthnum'), 
    'post_status' => 'publish', 
    'showposts' => 3 
); 
query_posts($args); 


# the loop  
while (have_posts()) : the_post(); 
# markup 
endwhile; 


if($wp_query->max_num_pages > 1): 
# next_posts_link/previous_posts_link 
endif; 

wp_reset_query(); 

Esto está funcionando hasta el momento. Pero tengo problemas con las páginas de categorías y etiquetas. Si llamo a la página principal todo está bien y puedo paginar a través de las páginas obteniendo los resultados correctos.

Y, si llamo una URL paginada, p./category/mycat/page/2 a 404. Pero definitivamente deberían ser publicaciones. No importa si hay publicaciones de tipo personalizado o publicaciones normale en la categoría. Supongo que mis parámetros para query_posts() no son correctos, pero no sé ...

Parece que $ wp_query-> max_num_pages tiene un valor incorrecto. ¿Pero por qué? ¿Registro correctamente las taxonomías (me gusta usar categorías y etiquetas para mis tipos de publicaciones personalizadas)?

¿Tienes alguna idea de qué hacer? ¡Muchas gracias!

Respuesta

2

yo sólo he encontrado la exacta mismo problema y no pudo encontrar la solución en ningún lado! Las redes están llenas de recursos sobre el tema, pero ninguna proporcionó la respuesta correcta al problema.

Aquí está la respuesta correcta para quien busca. Coloque el código siguiente en functions.php en el directorio raíz de su tema.

function init_category($request) { 
    $vars = $request->query_vars; 
    if (is_category() && !is_category('Blog') && !array_key_exists('post_type', $vars)) : 
     $vars = array_merge(
      $vars, 
      array('post_type' => 'any') 
     ); 
     $request->query_vars = $vars; 
    endif; 
    return $request; 
} 
add_filter('pre_get_posts', 'init_category'); 

Todos los créditos van a Mike que ha publicado esto en Wordpress.com. ¡Aclamaciones!

+0

Acabo de darles esta forma de código de mis notas. Bien hecho. ¡pre_get_posts es difícil de discutir! – BenRacicot

+0

Este trabajo para mí, tiene el mismo problema con CPT, gracias – MrRoman

0

Asegúrese de agregar esto:

'paged' => get_query_var('paged') 

a sus $ args y debe aceptar la paginación bien.

Más here

+0

Hola David. Gracias, pero como pueden ver, paso el argumento paginado a query_posts(). ¿O hay algo de malo en esto? – Status4

+0

Vaya, mi mal. Te sugiero que hagas un 'print_r ($ args);' para ver exactamente lo que se envía, esa podría ser tu primera pista sobre el problema. Otra cosa: los postes están depracados, intente usar posts_per_page en su lugar. Finalmente, puede intentar establecer explícitamente "nopaging" => false – David

+0

Lo intentaré, gracias hasta ahora – Status4

0

En el archive.php intente utilizar el siguiente:

query_posts(array(
    'post_type' => 'lifestream', 
    'posts_per_page' => 6, 
    'orderby' => 'menu_order', 
    'orderby' => 'date', 
    'order' => 'ASC', 
    'paged' => '' . get_query_var('paged') 
)); 

if (have_posts()) : while (have_posts()) : the_post(); 

endwhile; else: 
endif; 

Durante los siguientes y anteriores enlaces de páginas que utilizo:

next_posts_link('Older Entries', $wp_query->max_num_pages); 
previous_posts_link('Newer Entries', $wp_query->max_num_pages); 
Cuestiones relacionadas