Come ottenere corretta POST_COUNT e found_posts all'interno di file di inclusione

voti
0

Ho creato un file che mi permette di filtrare le mie domande pubblicare utilizzando una categoria a discesa includono. Sto cercando di ottenere la post_counte found_postsdinamicamente in modo da poter visualizzare Showing 6 out of 12 Posts, per esempio. Sono compresi questo filtro su un modello di pagina personalizzato con un WP_Query personalizzato, ma io sono sempre Showing 1 out of 1 Postsnonostante ci sia 10+ messaggi. Credo che la ragione che sta facendo questo è perché il filtro comprendono sta utilizzando la query singola pagina, piuttosto che la mia domanda posta personalizzato. Come posso fare per l'aggiornamento di questo in modo che il filtro utilizza mia domanda posta personalizzato?

inc / filter.php:

<?php
    global $wp_query;
    $count = $wp_query->post_count;
    $total = $wp_query->found_posts;
?>

<div class=container>
    <div class=row>
        <div class=col>
            <?php $get_categories = get_categories(); ?>
            <select>
                <option selected disabled>Select category</option>
                <option value=all>All</option>
                <?php
                    if ($get_categories) :
                        foreach ($get_categories as $cat) :
                    ?>
                    <option value=<?php echo $cat->term_id; ?>>
                        <?php echo $cat->name; ?>
                    </option>
                    <?php endforeach; 
                        endif;
                    ?>
            </select>
            <div class=shown-posts>Showing <span class=visible-posts><?php echo $count; ?></span> of <span class=total-posts><?php echo $total; ?></span> posts</div>
        </div>
    </div>
</div>

Ed ecco il mio modello di pagina personalizzato:

<?php get_header();?>
<?php 
    $posts = new WP_Query(array(
        'post_type' => 'post'
    ));
?>
<?php if($posts->have_posts()): ?>
    // Here's where I'm including the filter file
    <?php get_template_part( 'inc/filter' ); ?>
    <div class=container post-container>
        <div class=row row-eq-height>
            <?php while ($posts->have_posts()) : $posts->the_post();
                the_title();
            endwhile; ?>
        </div>
    </div>
<?php endif; ?>
È pubblicato 02/12/2019 alle 23:56
fonte dall'utente
In altre lingue...                            


2 risposte

voti
1

Il modo corretto per passare variabile per i modelli incluso via get_template_part()è quella di aggiungerli alla WordPress query_vars.

Quindi, in inc / filter.php rimuovere tutto questo ...

<?php
    global $wp_query;
    $count = $wp_query->post_count;
    $total = $wp_query->found_posts;
?>

Poi nel modello principale add ...

<?php 
    $posts = new WP_Query(array(
        'post_type' => 'post'
    ));

    set_query_var( 'count', $posts->post_count );
    set_query_var( 'total', $posts->found_posts );
?>
Risposto il 03/12/2019 a 00:21
fonte dall'utente

voti
0

Modificare il calcolo in inc / filter.php a:

<?php
    $count = $posts->post_count;
    $total = $posts->found_posts;
?>

Lei ha ragione che l'oggetto WP_Query globale sta puntando alla singola pagina contenente tutto questo. Istanziare un nuovo WP_Query non sovrascrive il WP_Query globale . Infine, ricordiamo che niente circa le modifiche di portata quando si include il file del filtro - così, basta tenere utilizzando la $postsvariabile che già l'installazione.

Risposto il 03/12/2019 a 00:34
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more