web-dev-qa-db-de.com

Benutzerdefinierte Posttyp-Archive 404 mit paginate_links

ich verwende die Funktion paginate_links , um eine Paginierung in meinen benutzerdefinierten Post-Typ-Archiven zu erstellen, unabhängig davon, was ich tue Weg).

Ich habe nachgeprüft und recherchiert und komme mit all dem anscheinend nicht weiter. Hier ist meine Abfrage vor der Schleife in der Datei archive-MY_CUSTOM_POST_TYPE.php:

<?php

global $wp_query;

$args = array_merge( $wp_query->query, array( 'post_type' => 'sales', 'posts_per_page'  => 1, ) );

query_posts( $args );


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

und weiter unten nach den Schleifen endif und über wp_reset_query habe ich

<?php endif; ?>

<div class="clear"></div><!-- / clear -->

<div class="pagination">

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

</div><!-- / paginate -->  

Auf meiner loop-index.php funktioniert dies ohne Probleme, aber auf einer Schleife in Custom Post Type ist es ein Nein, ich habe keine Konflikte mit duplizierten Slugs, da ich gelesen habe, dass dies ein Problem sein kann, also nehme ich es, dass es hat etwas damit zu tun, wie ich die Beiträge vor der Schleife abfrage, irgendwelche Zeiger?

grüße
Martin

5
MartinJJ

Wenn jemand anderes das gleiche Problem hat, ist meine vollständige Problemumgehung:
1) in wp-admin >> settings >> reading set blog posts to show as 1.
2) Überschreibe dies dann in loop-blog.php zu posts_per_page => 10.
3) Setze in deinen benutzerdefinierten post type loop.php files posts_per_page => 5.

Denken Sie daran, dies sind die Einstellungen, die ich benötige. Ihre Anforderungen können unterschiedlich sein. Unterm Strich lautet: Setzen Sie Blog-Posts in wp-admin auf 1. Sie können die andere Anzahl von posts_per_page entsprechend Ihren eigenen Anforderungen konfigurieren

jetzt funktioniert alles gut, ein bisschen hacky, aber zumindest funktioniert es, also ist meine nächste Frage >>> Ist das ein Wp-Bug?

3
MartinJJ

Martins Korrektur funktioniert, aber eine bessere Lösung ist die Verwendung der Funktion pre_get_posts.

Beispiel:

function custom_type_archive_display($query) {
    if (is_post_type_archive('custom_type')) {
        $query->set('posts_per_page',1);
        return;
    }
}

add_action('pre_get_posts', 'custom_type_archive_display');
5
Nathan Hangen

Ich weiß, dass dies alt ist, aber ich hatte das gleiche Problem und habe es gelöst, indem ich den Permalink der Seite geändert habe, die den 404 verursacht hat.

Dies liegt daran, dass Sie anscheinend keinen Page-Slug mit demselben Namen wie Ihr benutzerdefinierter Beitragstyp haben können.

Ryan S. erhält das gesamte Verdienst, die ursprüngliche Lösung geteilt zu haben: http://www.sutanaryan.com/2013/09/404-error-in-custom-post-type-pagination-wordpress/

0
RAMIREZ