2010-07-24 5 views
5

Ich versuche, Paginierung arbeiten mit dem wp pagenavi Plugin und eine benutzerdefinierte Beitragstyp (Portfolio-Seite) in WordPress und ich habe kein Glück.Wordpress benutzerdefinierte Beitragstyp Paginierung

Hier ist eine abgespeckte Version meiner Portfolio-Seite:

<?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(); ?> 

Ich habe meine Permalinks auf:

/%postname%/ 

und ich habe sie neu gespeichert.

Als ich Seite zwei meines Portfolios bekam, bekomme ich eine 404 Seite. Irgendeine Idee, warum das passiert?

Danke für die Hilfe.

+3

Dies wurde hier gelöst, wenn jemand anderes in das gleiche Problem lautet: http://wordpress.org/support/topic/429149?replies=1#post-1616810 – Joe

+0

Warum das nicht machen eine Antwort und als akzeptiert markieren? – Kev

Antwort

0

hatte ich ein Problem mit Paginierung in Wordpress, und konnte es nicht beheben, so rollte ich meine eigene Erweiterung der WP_Query Klasse ->MF_Query

einfach MF_Query anstelle von WP_Query verwenden und verwenden Sie dann $your_query->next("Next Page") oder $your_query->prev("Previous Page") als apposed hinzuzufügen erforderlich nächste und vorherige Links (Text hat Standardwerte, also keine Argumente.

Es ist erforderlich, dass Sie Ihre Argumente direkt an die Klasse der Initialisierung als Array übergeben, um die verschiedenen Optionen, die Sie mit Standard WP_Query haben.

Es ist ein bisschen hacky, aber es funktioniert !!

2

Ich glaube, Sie einen schlimmen Fall von der alten Wordpress URL Redirect haben.

Versuchen Sie diesen Filter Zugabe zu stoppen:

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

Genau, aber in vielen Fällen sollte die Zeile sein: if (get_post_type ($ post) == 'portfolio' && is_archive()) $ redirect_url = false; – Imperative

0

Dies ist die Art, wie ich gehen, um die ausgelagerten Variable in die CPT-Abfrage für die Navigation zu übergeben, können Sie verschiedene Methoden haben diese auf zu tun, aber dies ist die einzige Eins hat es für mich mit dem WP_QUERY funktioniert. Und kein Plugin für die Navigation benötigt nur Standard-Navigationslinks.

Sie sollten diese Zeile hier platzieren, bevor Sie

$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 
    ?> 

WP_QUERY Nachdem Sie Ihre Loop-Datei fügen Sie diese zu Ihrer functions.php ist dies die Variable ändern, die die Seite Ihre auf ausarbeitet.

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');  

Sie können auch diesen Beitrag ist Erläuterung des Verfahrens zum Verkettungs Vorlagen lesen Sie diese Paginierung Problem zu beheben, die wir zu tun haben, wenn benutzerdefinierte Abfragen beinhaltet.

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; 

?>