wake-up-neo.com

Jede Tag-Paginierungsseite (mit Ausnahme der ersten Seite) lädt die index.php-Vorlage anstelle der tag.php

Ich habe mein erstes benutzerdefiniertes Design von Grund auf erstellt und versuche, eine Liste aller Beiträge mit demselben Tag zu erstellen.

In tag.php zeige ich alle Posts mit diesem bestimmten Tag über einen WP_Query an und versuche, die Paginierung für dieses Listing zu implementieren (mit paginate_links()). Seitenlinks scheinen korrekt ausgegeben zu werden. Auch die erste Seite sieht gut aus.

Was ich nicht verstehe, ist, dass der Inhalt von tag.php angezeigt wird, wenn ich zur nächsten Tag-Seite (oder zu einem der Seitenlinks, die von meiner http://127.0.0.1/wp_site/tag/test_tag/page/2/-Vorlage ausgegeben werden, z. B. index.php) gehe.

Was fehlt mir eigentlich, um die nachfolgenden Tag-Seiten korrekt anzuzeigen?

tag.php template CODE:

<?php get_header(); ?>
<div class="">
    <div id="primary" class="content-area">
        <main id="main" class="site-main" role="main">
            <?php if (have_posts()) : ?>
                <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                    <header class="entry-header">
                        <h1 class="entry-title">Other entries related to &#39;<?php single_tag_title(); ?>&#39;</h1>
                    </header><!-- .entry-header -->
                    <div class="entry-content"></div><!-- .entry-content -->
                </article><!-- #post-## -->
                <div>   
                    <?php while (have_posts()) : the_post(); ?>
                       <?php
                            $tagId = get_queried_object()->term_id;
                            $postType = get_post_type();
                        ?>
                    <?php endwhile; ?>
                    <?php
                        $htmlOutput = '';
                        /* the 'terms' ID is the testimonial category parent id */
                        $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
                        $args = [
                              'post_type' => 'testimonials-widget', 
                              'tag_id' => $tagId,
                              'posts_per_page' => 3,
                              'paged' => $paged,
                              'tax_query' => [
                                    [
                                        'taxonomy' => 'category',
                                        'field'    => 'term_id',
                                        'terms'    => '8',
                                    ]
                                ],
                        ];    
                        $post_query = new WP_Query($args);
                        $contentHtml = '';
                        if($post_query->have_posts() ) {
                            $posts = $post_query->posts;
                            foreach($posts as $post) {
                                // generate html output
                            }
                        }
                        wp_reset_postdata();
                        echo $contentHtml;
                    ?>
                </div>
                <div class="mainContentWrapperCls">
                <?php 
                    echo paginate_links( array(
                        'base'         => str_replace( 999999999, '%#%', esc_url( get_pagenum_link( 999999999 ) ) ),
                        'total'        => $post_query->max_num_pages,
                        'current'      => max( 1, get_query_var( 'paged' ) ),
                        'format'       => '?paged=%#%',
                        'show_all'     => false,
                        'type'         => 'plain',
                        'end_size'     => 2,
                        'mid_size'     => 1,
                        'prev_next'    => true,
                        'prev_text'    => sprintf( '<i></i> %1$s', __( '&lt;&lt; Previous page', 'text-domain' ) ),
                        'next_text'    => sprintf( '%1$s <i></i>', __( 'Next page &gt;&gt;', 'text-domain' ) ),
                        'add_args'     => false,
                        'add_fragment' => '',
                    ) );
                ?>
            </div>
            <?php else : ?>
                <h1>No posts were found.</h1> 
            <?php endif; ?>
        </main><!-- #main -->
    </div><!-- #primary -->
</div><!-- .wrap -->
<?php get_footer(); ?>

Hinweis:Ich habe eine neue Abfrage mit WP_Query in tag.php erstellt. Der Grund, warum ich das getan habe, ist, dass ich nicht wusste, wie ich die benötigte Paginierungsart (<Prev 1 2 3 Next> style) über paginate_links() mit der Hauptabfrage erzeugen kann.

Theme functions.php CODE:

<?php
    function myCustomThemeScriptEnqueue() {
        // Theme stylesheet, js
        wp_enqueue_style('myCustomTheme-style', get_stylesheet_uri(), array(), '1.0.0', 'all');
    }

    function myCustomThemeThemeSetup() {
        add_theme_support('menus');
        add_post_type_support( 'page', 'excerpt' );
    }

    function nllTagFilter($query) {
        if ($query->is_main_query()) {
            if ($query->is_tag) {
                $post_types = get_post_types();
                $query->set('post_type', $post_types);
            }
        }
    }

    add_action('pre_get_posts','nllTagFilter');

    add_action('wp_enqueue_scripts', 'myCustomThemeScriptEnqueue');
    add_action('init', 'myCustomThemeThemeSetup');

    add_theme_support( 'post-thumbnails' );
    set_post_thumbnail_size( 150, 150 );
?>

Dies ist die Dateistruktur meines Themas:

 custom theme file structure 

2
Cristian C

Allgemeine CODE-Probleme:

Ihr CODE ist in vielerlei Hinsicht so falsch, dass ich nicht einmal versuchen sollte, sie hier anzusprechen. Ich schlage vor, Sie studieren Official WordPress Theme Handbook richtig, bevor Sie diese Art von Anpassungen vornehmen.

Aus Gründen des Kontexts ignoriere ich andere Probleme in Ihrem CODE und berühre nur die folgenden Probleme:

1. Warum wird die Vorlage index.php geladen?

Zuallererst erhalten Sie eine falsche Paginierung von Ihrem fehlerhaften CODE (überprüfen Sie die Erklärung unten). Abgesehen von der ersten Tag-Seite sind alle anderen Tag-Seiten nicht vorhanden (d. H. Sie müssen dem Tag weitere Beiträge hinzufügen, um mehr Tag-Seiten zu erhalten).

Zweitens sollte gemäß den Regeln zum Laden von WordPress-Vorlagen die 404.php-Vorlage für diese nicht vorhandenen Tag-Seiten geladen werden (wie Sie wahrscheinlich wissen, ist in HTTP 404 der Fehlercode für nicht gefundene Seiten ). Da Sie jedoch keine 404.php-Vorlage in Ihrem Design haben, wird die index.php-Vorlage geladen, da es sich um die ultimative Fallback-Vorlage in einem WordPress-Design handelt.

Wenn Sie jetzt eine 404.php-Vorlage erstellen, wird diese für diese nicht vorhandenen Tag-Seiten anstelle von index.php geladen.

Studieren Sie WordPress-Vorlagenhierarchie richtig, um besser zu verstehen, wie unterschiedliche Vorlagen für unterschiedliche Inhalte geladen werden.

2. Die falsche Paginierung korrigieren:

Wie oben erwähnt, erhalten Sie in Ihrer Paginierung nicht vorhandene Seitenzahlen für Tags. Um diese nicht vorhandenen Seitenzahlen aus der Paginierung zu entfernen, müssen Sie die löschen

'total' => $post_query->max_num_pages

zeile aus dem Funktionsaufruf paginate_links in der Vorlagendatei tag.php.

Der Grund ist:

  1. $post_query ist Ihre benutzerdefinierte Abfrage, nicht die Hauptabfrage, die die Anzahl der Seiten im Tag-Archiv bestimmen soll. Sie haben sogar wp_reset_postdata() vor dem Funktionsaufruf paginate_links verwendet, sodass es keinen Grund gibt, diese Variable hier zu verwenden.

  2. Der Parameter total der Funktion paginate_links ruft standardmäßig den Wert der Eigenschaft max_num_pages der Haupt-WP_Query ab. Wenn Sie es also löschen, wird automatisch der richtige Wert für die Paginierung aus dem Hauptobjekt WP_Query bereitgestellt.

3. Paginierung ohne neuen WP_Query:

In den Kommentaren sagten Sie:

Der Grund, warum ich das getan habe, ist, dass ich nicht wusste, wie ich die benötigte Paginierungsart (<Prev 1 2 3 Next> style) über paginate_links() mit der Hauptabfrage erzeugen kann.

Nun, Sie brauchen keinen komplett neuen WP_Query, nur für einen anderen Paginierungsstil. Tatsächlich benötigt die Funktion paginate_links() das Hauptobjekt WP_Query überhaupt nicht!

Alles, was Sie für Ihren gewünschten Paginierungsstil benötigen, ist:

echo paginate_links( array(
    'end_size'     => 2,
    'mid_size'     => 1,
    'prev_text'    => __( '&lt;&lt; Previous page', 'text-domain' ),
    'next_text'    => __( 'Next page &gt;&gt;', 'text-domain' ) 
) );

Alle anderen Werte werden standardmäßig erfasst (einschließlich des Hauptobjekts WP_Query)! So können Sie Ihr neues WP_Query-Objekt in der tag.php-Vorlage vollständig entfernen. Überprüfen Sie die paginate_links Dokumentation .

Abgesehen davon kann es nur noch eine Sache geben, die Sie sich wünschen könnten (nach Ihren Kommentaren zu urteilen):

4. Kontrollieren Sie die Anzahl der Beiträge pro Tag-Seite:

Sie brauchen dafür auch keinen neuen WP_Query. Dies kann einfach mit dem folgenden CODE in functions.php erreicht werden:

function tag_post_per_page_filter( $query ) { 
    if ( $query->is_main_query() ) { 
        if ( $query->is_tag ) { 
            $query->set( 'posts_per_page', 3 );
        }   
    }   
}   

add_action('pre_get_posts','tag_post_per_page_filter');

Grundsätzlich setzt es den posts_per_page auf 3 im Hauptobjekt WP_Query für die Tag-Seiten. Das ist alles.

1
Fayaz