Stilizează primele 3 postări diferit și folosește o a 2-a buclă pentru restul postărilor / offset și paginare defecte

23 ian. 2017, 15:14:14
Vizualizări: 1.59K
Voturi: -1

Lucrez la o temă și am probleme cu buclele/paginarea care se strică când folosesc un offset. Am căutat online și am încercat să folosesc o singură buclă (conform acestui post), dar am dificultăți în a o face să funcționeze.

Vreau să am primele 3 postări în partea de sus a paginii (postările 1-3), iar în partea de jos următoarele 3 postări (4-6). Când dau click pe paginare, vreau ca în partea de sus să fie din nou primele 3 postări (1-3), iar în partea de jos postările 7-9.

În prezent, codul funcționează corect pe prima pagină, dar când dau click pe "înapoi" în paginare, afișează aceleași 6 postări pe fiecare pagină anterioară.

Iată codul pentru pagina Index:

<?php get_header(); ?>

<div class="row post-carousel">
<?php
    $args = array(
    'posts_per_page' => '3',
    );

    $query = new WP_query ( $args );
    if ( $query->have_posts() ) { ?>

<?php while ( $query->have_posts() ) : $query->the_post(); /* începe bucla */ ?>

<div class="col-xs-12 col-sm-4">
<article id="post-<?php the_ID(); ?>" <?php post_class( 'most-recent' ); ?>>
    <?php if ( has_post_thumbnail() ) { ?>
        <a href="<?php the_permalink(); ?>">
                <div class="post-thumbnail-img"><?php the_post_thumbnail('index-carousel'); ?></div>

        </a>
    <?php } ?>
    <?php the_title( sprintf( '<h2 class="entry-title"><a href="%s" rel="bookmark">', esc_url( get_permalink() ) ), '</a></h2>' ); ?>


</article><!-- #post-## -->
</div>

<?php // Încheie bucla
endwhile;

rewind_posts();

} ?>
</div>

<div class="row newsletter-container">
<div class="newsletter col-sm-12 col-md-6">
    <pnscrie-te la newsletter pentru cele mai noi actualizări!</p>
</div>
<div class="newsletter col-sm-12 col-md-6">

<!-- Begin MailChimp Signup Form -->
<!-- codul merge aici -->
<!--End mc_embed_signup-->

</div>
</div>


    <?php query_posts('posts_per_page=3&offset=3');
        if ( have_posts() ) : ?>

        <?php /* Start the Loop */ ?>
        <?php while ( have_posts() ) : the_post(); ?>

            <?php
                /* Include șablonul specific formatului postării.
                 * Pentru a-l suprascrie într-o temă copil, includeți un fișier
                 * numit content-___.php (unde ___ este numele Formatului Postării)
                 */
                get_template_part( 'content', get_post_format() );
            ?>

        <?php endwhile; ?>

        <?php _tk_content_nav( 'nav-below' ); ?>

    <?php else : ?>

        <?php get_template_part( 'no-results', 'index' ); ?>

    <?php endif; ?>

<?php get_footer(); ?>

De asemenea, când încerc să folosesc sintaxa alternativă PHP pentru structurile de control, codul se strică și întreaga pagină devine albă.

Adaug și codul de navigație:

if ( ! function_exists( '_tk_content_nav' ) ) :
/**
 * Afișează navigația către paginile următoare/precedente când este cazul
 */
function _tk_content_nav( $nav_id ) {
    global $wp_query, $post;

    // Nu afișa markup gol pe pagini unice dacă nu există unde naviga
    if ( is_single() ) {
        $previous = ( is_attachment() ) ? get_post( $post->post_parent ) : get_adjacent_post( false, '', true );
        $next = get_adjacent_post( false, '', false );

        if ( ! $next && ! $previous )
            return;
    }

    // Nu afișa markup gol în arhive dacă există doar o pagină
    if ( $wp_query->max_num_pages < 2 && ( is_home() || is_archive() || is_search() ) )
        return;

    $nav_class = ( is_single() ) ? 'post-navigation' : 'paging-navigation';

    ?>
    <nav role="navigation" id="<?php echo esc_attr( $nav_id ); ?>" class="<?php echo $nav_class; ?>">
        <h1 class="screen-reader-text"><?php _e( 'Navigare postări', '_tk' ); ?></h1>
        <ul class="pager">

        <?php if ( is_single() ) : // linkuri de navigare pentru postări individuale ?>

            <?php previous_post_link( '<li class="nav-previous previous">%link</li>', '<span class="meta-nav">' . _x( '&larr;', 'Link postare anterioară', '_tk' ) . '</span> %title' ); ?>
            <?php next_post_link( '<li class="nav-next next">%link</li>', '%title <span class="meta-nav">' . _x( '&rarr;', 'Link postare următoare', '_tk' ) . '</span>' ); ?>

        <?php elseif ( $wp_query->max_num_pages > 1 && ( is_home() || is_archive() || is_search() ) ) : // linkuri de navigare pentru pagini de acasă, arhivă și căutare ?>

            <?php if ( get_next_posts_link() ) : ?>
            <li class="nav-previous previous"><?php next_posts_link( __( '<span class="meta-nav">&larr;</span> Postări mai vechi', '_tk' ) ); ?></li>
            <?php endif; ?>

            <?php if ( get_previous_posts_link() ) : ?>
            <li class="nav-next next"><?php previous_posts_link( __( 'Postări mai noi <span class="meta-nav">&rarr;</span>', '_tk' ) ); ?></li>
            <?php endif; ?>

        <?php endif; ?>

        </ul>
    </nav><!-- #<?php echo esc_html( $nav_id ); ?> -->
    <?php
}
endif; // _tk_content_nav
0
Toate răspunsurile la întrebare 2
3

Mein Rat wäre, niemals query_posts zu verwenden. Nutzen Sie stattdessen eine benutzerdefinierte Abfrage oder den pre_get_posts-Hook für beide Fälle und stellen Sie sicher, dass Sie wp_reset_postdata nach Ihrer benutzerdefinierten Abfrage aufrufen.

ABER da Ihre Navigationsfunktion auf die global $wp_query verweist, müssten Sie query_posts verwenden und den paged-Parameter übergeben.

<?php get_header(); ?>

    <div class="row post-carousel">
        <?php
        $args = array(
            'posts_per_page' => '3',
        );

        $query = new WP_query ( $args );
        if ( $query->have_posts() ) { ?>

            <?php while ( $query->have_posts() ) : $query->the_post(); /* start the loop */ ?>

                <div class="col-xs-12 col-sm-4">
                    <article id="post-<?php the_ID(); ?>" <?php post_class( 'most-recent' ); ?>>
                        <?php if ( has_post_thumbnail() ) { ?>
                            <a href="<?php the_permalink(); ?>">
                                <div class="post-thumbnail-img"><?php the_post_thumbnail('index-carousel'); ?></div>

                            </a>
                        <?php } ?>
                        <?php the_title( sprintf( '<h2 class="entry-title"><a href="%s" rel="bookmark">', esc_url( get_permalink() ) ), '</a></h2>' ); ?>


                    </article><!-- #post-## -->
                </div>

            <?php // End the loop.
            endwhile;
            wp_reset_postdata();

        } ?>
    </div>

    <div class="row newsletter-container">
        <div class="newsletter col-sm-12 col-md-6">
            <p>Melden Sie sich für meinen Newsletter an, um alle neuesten Updates zu erhalten!</p>
        </div>
        <div class="newsletter col-sm-12 col-md-6">

            <!-- Begin MailChimp Signup Form -->
            <!-- code goes here -->
            <!--End mc_embed_signup-->

        </div>
    </div>


<?php
$paged = ( get_query_var('page') ) ? get_query_var('page') : 1;
$second_args = array(
    'posts_per_page' => 3,
    'offset' => 3,
    'paged' => $paged
);
query_posts($second_args);
if ( have_posts() ) : ?>

    <?php /* Start the Loop */ ?>
    <?php while ( have_posts() ) : the_post(); ?>

        <?php
        /* Include the Post-Format-specific template for the content.
         * If you want to overload this in a child theme then include a file
         * called content-___.php (where ___ is the Post Format name) and that will be used instead.
         */
        get_template_part( 'content', get_post_format() );
        ?>

    <?php endwhile; wp_reset_postdata(); ?>

    <?php _tk_content_nav( 'nav-below' ); ?>

<?php else : ?>

    <?php get_template_part( 'no-results', 'index' ); ?>

<?php endif; ?>

<?php get_footer(); ?>
23 ian. 2017 15:43:16
Comentarii

Am încercat acest lucru și paginarea încă nu funcționează. Încă afișează aceleași articole ca pe prima pagină când merg la articolele anterioare... Ai vreo idee despre cum să rezolv problema de paginare?

Holly Holly
23 ian. 2017 17:13:10

Tocmai am căutat funcția ta de navigare și văd că face referire la global $wp_query. Am actualizat răspunsul meu

Tunji Tunji
23 ian. 2017 17:21:53

Hmm, am actualizat codul cu modificările tale și încă nu funcționează. Am inclus codul de paginare mai sus în întrebarea mea originală. Ar trebui să schimb ceva acolo?

Holly Holly
23 ian. 2017 17:39:53
0

S-ar putea să fie prea târziu, dar totuși cred că acest cod va funcționa pentru tine.

<?php
    if( !is_paged() ){ // Condiție pentru a verifica dacă este prima pagină a listei de bloguri, dacă da, atunci True
        $homepagePosts = new WP_Query(array( 'posts_per_page' => 3 )); // Condiție personalizată pentru a afișa doar postări recente
            while ($homepagePosts->have_posts()) {
                $homepagePosts->the_post(); ?>
                <div class="clearfix mt-4 mb-4 wrapper">
                    <div class="clearfix single-post">
                        <div class="fl single-post-img">
                            <div class="blogthumb">
                                <?php if (has_post_thumbnail( $post->ID ) ): ?>
                                    <?php $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'singplepost' ); ?>
                                    <a href="<?php the_permalink() ?>"><img src="<?php echo $image[0]; ?>" alt="<?php the_title(); ?>" title="<?php the_title(); ?>"></a>
                                <?php endif; ?>
                            </div>      
                        </div>
                        <div class="fl single-post-content">
                            <h2><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></h2>
                            <span class="d-block position-relative mb-2"><?php echo wp_trim_words(get_the_excerpt(), 18); ?></span>
                            <span class="small" style="color:#888"><?php echo get_the_time('F jS, Y'); ?></span>
                        </div>      
                    </div>
                </div>
    <?php } wp_reset_postdata(); ?> 

<?php } ?>
<!-- O postare mare -->

<!-- Toate celelalte postări -->
<div class="clearfix wrapper">
    <div class="clearfix authorpostcontainer">
        <?php
        $current_page = get_query_var('paged');
        $current_page = max( 1, $current_page );
        $per_page = 9;
        $offset_start = 1;
        $offset = ( $current_page - 1 ) * $per_page + $offset_start;
        $post_list = new WP_Query(array(
            'posts_per_page' => $per_page,
            'paged'          => $current_page,
            'offset'         => $offset, // Începe cu a doua postare recentă.
        ));

        // Numărăm manual numărul de pagini, pentru că am folosit un OFFSET personalizat (adică
        // altul decât 0), așa că nu putem folosi simplu $post_list->max_num_pages sau chiar
        // $post_list->found_posts fără calcule suplimentare.
        $total_rows = max( 0, $post_list->found_posts - $offset_start );
        $total_pages = ceil( $total_rows / $per_page );

        if ( $post_list->have_posts() ):
            while ( $post_list->have_posts() ):
                $post_list->the_post();
        ?>
        <div class="one-third fl blogbox">
                <div class="blogthumb">
                    <?php if (has_post_thumbnail( $post->ID ) ): ?>
                        <?php $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'newpost' ); ?>
                        <a href="<?php the_permalink() ?>"><img src="<?php echo $image[0]; ?>" alt="<?php the_title(); ?>" title="<?php the_title(); ?>"></a>
                    <?php endif; ?>
                    </div>              
                    <div class="blogdetails">
                        <a href="<?php the_permalink() ?>" rel="bookmark" class="posttitle"><?php the_title(); ?></a>               
                        <span class="postdate"><?php echo get_the_time('F jS, Y'); ?></span><!--&nbsp;&nbsp;|&nbsp;&nbsp;<php $current_cat_id = the_category_ID(false); ?><a href='<php echo get_category_link($current_cat_id); ?>' class="catlink"><php echo get_cat_name($current_cat_id); ?></a-->
                    </div>              
                </div>
            <?php
            endwhile;
            endif;
            wp_reset_postdata();    
        ?>
    </div>  
</div>

<div class="clearfix wrapper mt-4 mb-4 text-center">
    <?php
        echo paginate_links( array(
            'total'   => $total_pages,
            'current' => $current_page,
        ) );
    ?>
</div>
<!-- Toate celelalte postări -->
22 iun. 2022 11:01:25