2010-07-24 13 views
5

Estoy tratando de obtener la paginación de trabajo con el plugin wp pagenavi y un tipo de publicación personalizado (página de cartera) en WordPress y no estoy teniendo suerte.Palabra de encargo de Wordpress tipo paginación

Aquí es una versión simplificada de mi página de la cartera:

<?php get_header(); ?> 

<?php 
    $type = 'portfolio'; 
    $args=array(
    'post_type' => $type, 
    'post_status' => 'publish', 
    'paged' => $paged, 
    'posts_per_page' => 1, 
    'caller_get_posts'=> 1 
); 
    $temp = $wp_query; // assign original query to temp variable for later use 
    $wp_query = null; 
    $wp_query = new WP_Query($args); 
?> 

<?php if($wp_query->have_posts()) : while($wp_query->have_posts()) : $wp_query->the_post(); ?> 
... 
<?php endwhile; else : ?> 
... 
<?php endif; ?> 

<?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); } 
    $wp_query = null; $wp_query = $temp; ?> 

<?php get_footer(); ?> 

tengo mis enlaces permanentes establecen en:

/%postname%/ 

y los he vuelto a guardar.

Cuando llegué a la página dos de mi cartera, obtengo una página 404. ¿Alguna idea de por qué está pasando esto?

Gracias por la ayuda.

+3

Esto se resolvió aquí si alguien más se encuentra con el mismo problema: http://wordpress.org/support/topic/429149?replies=1#post-1616810 – Joe

+0

Por qué no hacer de este una respuesta y marca como aceptada? – Kev

Respuesta

0

tuve un problema con la paginación en Wordpress, y no podía arreglarlo, así que rodó mi propia extensión de la clase WP_Query ->MF_Query

Sólo tiene que utilizar MF_Query en lugar de WP_Query, y luego usar $your_query->next("Next Page") o $your_query->prev("Previous Page") añadir enlaces siguientes y anteriores (texto tiene por defecto, así que no hay argumentos necesarios.

se requiere que usted pasa sus argumentos directamente a la inicialización de clase como una matriz, como adosados ​​a las diferentes opciones que tiene con la norma WP_Query.

¡Es un poco raro, pero funciona!

2

Creo que usted está teniendo un mal caso de la antigua URL de redirección de WordPress.

Trate de añadir este filtro para detenerlo:

add_filter('redirect_canonical','my_disable_redirect_canonical'); 

function my_disable_redirect_canonical($redirect_url) { 
    if (is_single('portfolio')) 
    $redirect_url = false; 
    return $redirect_url; 
} 
+0

Preciso, sin embargo, en muchos casos la línea debería ser: if (get_post_type ($ post) == 'portfolio' && is_archive()) $ redirect_url = false; – Imperative

0

Ésta es la manera que voy a pasar la variable paginado en la consulta CPT para la navegación, puede tener diferentes métodos sobre cómo hacer esto, pero esta la única uno me funciona con WP_QUERY. Y no necesita ningún complemento para la navegación, solo enlaces de navegación estándar.

debe colocar esta línea de aquí antes de WP_Query

$paged = 1; 
if (get_query_var('paged')) $paged = get_query_var('paged'); 
if (get_query_var('page')) $paged = get_query_var('page'); 

$temp = $wp_query; 
       $wp_query = null; 
       $wp_query = new WP_Query(); 
       $wp_query->query('post_type=portafolio&showposts=7&orderby=post_date&order=DESC&paged='.$paged); 
while ($wp_query->have_posts()) : $wp_query->the_post(); 

//post format 
get_template_part("content");?> 

    <?php endwhile; ?> 

    //pagination links here 

    <?php 
     $wp_query = null; 
     $wp_query = $temp; // Reset 
    ?> 

Después de modificar el archivo de bucle de añadir esto a su functions.php esta es la variable que va a trabajar a cabo en la página de tu.

function paginate() { 
    global $wp_query, $wp_rewrite; 
    $wp_query->query_vars['paged'] > 1 ? $current = $wp_query->query_vars['paged'] : $current = 1; 

    $pagination = array( 
    'base' => @add_query_arg('page','%#%'), 
    'format' => '', 
    'total' => $wp_query->max_num_pages, 
    'current' => $current, 
    'show_all' => true, 
    'type' => 'plain' 
    ); 

    if ($wp_rewrite->using_permalinks()) $pagination['base'] = user_trailingslashit(trailingslashit(remove_query_arg('s', get_pagenum_link(1))) . 'page/%#%/', 'paged'); 
if (!empty($wp_query->query_vars['s'])) $pagination['add_args'] = array('s' => get_query_var('s')); 
echo paginate_links($pagination); 
} 

function portafolio_posts_per_page($query) { 
    if ($query->query_vars['post_type'] == 'portafolio') $query->query_vars['posts_per_page'] = 10; 
return $query; 
} 
if (!is_admin()) add_filter('pre_get_posts', 'portafolio_posts_per_page');  

También puede leer este post está explicando el método de plantillas Esto solucionará un problema de paginación que tenemos que hacer frente cuando se involucra consultas personalizadas encadenamiento.

http://wp.tutsplus.com/tutorials/custom-post-type-pagination-chaining-method/

0
<?php 

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
query_posts(array(
    'post_type' => 'portfolio', 
    'paged' => $paged, 
    'caller_get_posts' => 1, 
    'posts_per_page' => T_Panel('portfolio_page_num') 
)); 
if (have_posts()) : 
    while (have_posts()) : the_post(); 
     // your content loop her 
    endwhile; 
    wp_reset_query(); 
endif; 

?> 
Cuestiones relacionadas