it-swarm.com.de

Warum funktioniert "/ page/2 /" nicht?

Endlich wurde die Paginierung aktiviert, um mit dem folgenden Code zu arbeiten, aber jetzt verlinkt die Paginierung auf/videos/page/2 /, was nicht existiert. Wie bringe ich Seite 2 zum Arbeiten?

<?php
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query();
$wp_query->query('post_type=videos&showposts=1'.'&paged='.$paged);

while ($wp_query->have_posts()) : $wp_query->the_post();
  //display stuff
endwhile;           

php  wp_pagenavi();
 ?>
9
Dave

Fand die Antwort:

Nach einem langen Tag beim Debuggen durch WordPress konnte ich dieses Problem lösen.

Grundsätzlich KÖNNEN SIE KEINE SEITE und einen BENUTZERDEFINIERTEN POST-TYP mit demselben Namen haben. Wenn Sie dies tun, werden die Regeln zum Umschreiben von Permalinks verwirrt und lösen einen 404 aus.

Eine sehr einfache Lösung, die ich verwende, ist: Die Seite, auf der die benutzerdefinierten Beitragstypen aufgelistet sind, wird im Plural aufgerufen (z. B. Produkte), und der tatsächliche Beitragstypname wird im Singular angegeben (z. B. Produkt). Sie haben also keine Konflikte und es ist alles in Ordnung.

Fertig Fertig Ich hoffe, das spart den Leuten Zeit.

13
Dave

Nach langer Zeit habe ich eine Lösung für dieses Problem gefunden (danke an franzblog ).

Wenn Sie Version 4.2 oder höher verwenden, müssen Sie die folgenden Zeilen in Ihre functions.php-Datei einfügen:

add_filter( 'redirect_canonical', 'custom_disable_redirect_canonical' );
function custom_disable_redirect_canonical( $redirect_url ) {
    if ( is_paged() && is_singular() ) $redirect_url = false; 
    return $redirect_url; 
}

Alles funktioniert jetzt gut!

4
Dneiz

sie KÖNNEN KEINE SEITE und einen BENUTZERDEFINIERTEN POST-TYP mit demselben Namen haben

Vielleicht war es vor drei Jahren unmöglich, aber jetzt KÖNNEN Sie.

Fügen Sie zunächst diese Zeilen zu $args in Ihren Beitragstyp ein:

'has_archive' => false,
'rewrite'     => array(
                 'slug'       => 'your slug', // if you need slug
                 'with_front' => false,
                 ),

Zweitens fügen Sie in functions.php die Aktion hinzu:

add_action('init', 'custom_rewrite_basic');
function custom_rewrite_basic() {
    global $wp_post_types;
    foreach ($wp_post_types as $wp_post_type) {
        if ($wp_post_type->_builtin) continue;
        if (!$wp_post_type->has_archive && isset($wp_post_type->rewrite) && isset($wp_post_type->rewrite['with_front']) && !$wp_post_type->rewrite['with_front']) {
            $slug = (isset($wp_post_type->rewrite['slug']) ? $wp_post_type->rewrite['slug'] : $wp_post_type->name);
            $page = get_page_by_slug($slug);
            if ($page) add_rewrite_rule('^' .$slug .'/page/([0-9]+)/?', 'index.php?page_id=' .$page->ID .'&paged=$matches[1]', 'top');
        }
    }
}

function get_page_by_slug($page_slug, $output = OBJECT, $post_type = 'page' ) {
    global $wpdb;

    $page = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type= %s AND post_status = 'publish'", $page_slug, $post_type ) );

    return ($page ? get_post($page, $output) : NULL);
}

Vergessen Sie nicht, die Regeln im Dashboard zu löschen.

1
ruorc