Interogare toate articolele cu o etichetă specifică

15 oct. 2014, 12:30:59
Vizualizări: 47K
Voturi: 4

Am nevoie să extrag toate articolele cu o etichetă specifică, dar primesc toate articolele în schimb. Interogarea mea funcționează dacă public un articol cu eticheta de care am nevoie și listez toate articolele cu acea etichetă, dar când public un articol cu o altă etichetă, aceasta extrage articolul nou publicat.

Aceasta este interogarea mea:

$original_query = $wp_query;
$wp_query = null;
$args=array(
    'posts_per_page' => -1, 
    'tag' => $post_tag
);
$wp_query = new WP_Query( $args );
$post_titles=array();
$i=0;
if ( have_posts() ) :
    while (have_posts()) : the_post();
        $post_titles[$i]=get_the_ID() ;
        $i++;
    endwhile;
endif;
$wp_query = null;
$wp_query = $original_query;
wp_reset_postdata();
2
Comentarii

Cum obții $post_tag. Și interogarea ta este aceeași cu query_posts care nu ar trebui folosită deloc.

Pieter Goosen Pieter Goosen
15 oct. 2014 13:13:11

am un tag specific pe care l-am folosit static

Antwan Antwan
15 oct. 2014 13:19:03
Toate răspunsurile la întrebare 2
5

Este mult mai ușor să creezi un nou WP_Query decât să încerci să ștergi sau să suprascrii cel original.

Dacă $post_tag este un slug de etichetă, poți folosi simplu:

<?php
$the_query = new WP_Query( 'tag='.$post_tag );

if ( $the_query->have_posts() ) {
    echo '<ul>';
    while ( $the_query->have_posts() ) {
        $the_query->the_post();
        echo '<li>' . get_the_title() . '</li>';
    }
    echo '</ul>';
} else {
    // nu s-au găsit articole
}
/* Restabilirea datelor originale Post */
wp_reset_postdata();
15 oct. 2014 12:45:11
Comentarii

da, $post_tag este slug-ul etichetei, dar nu am înțeles care este diferența principală în codul tău, îmi pare rău, sunt începător în WordPress

Antwan Antwan
15 oct. 2014 12:58:46

Diferența principală este că codul tău încearcă să anuleze interogarea principală WP în loc să creeze pur și simplu una nouă.

Courtney Ivey Courtney Ivey
15 oct. 2014 13:05:09

primesc mesajul "niciun post găsit" - îmi pare rău, dar există vreo diferență între tag și slug-ul tag-ului?

Antwan Antwan
15 oct. 2014 13:09:46

În interogare, puteți folosi slug-uri sau ID-uri.

Courtney Ivey Courtney Ivey
15 oct. 2014 13:12:09

acum funcționează, dar am adăugat o nouă etichetă în engleză și funcționează, dar am etichete în arabă, așa că nu funcționează pentru ele

Antwan Antwan
15 oct. 2014 13:18:19
0

În fișierul tău functions.php

/* Afișează Produse Asemănătoare */
/* ============================ */

if ( ! function_exists( 'display_related_products' ) ) {

    function display_related_products($post_tag) {
        ?>
        <div class="related-products">

            <!-- Interogare WP_Query simplă -->
            <?php
                $args = array(
                    'post_type' => 'product',
                    'tag' => $post_tag, // Aici se filtrează după eticheta dorită
                    'orderby' => 'id',
                    'order' => 'ASC'
                );

                $related_products = new WP_Query( $args );
            ?>

            <?php while ( $related_products -> have_posts() ) : $related_products -> the_post(); ?>

                <a href="<?php the_permalink(); ?>" class="related-product">
                    <?php if( has_post_thumbnail() ) : ?>
                        <?php the_post_thumbnail( 'full', array( 'class' => 'related-product-img', 'alt' => get_the_title() ) ); ?>
                    <?php endif; ?>
                </a>

            <?php endwhile; wp_reset_query(); ?>

        </div>
        <?php
    }
}

Apelează din orice loc cu

display_related_products('numele-etichetei');
5 aug. 2016 00:20:54