WP_Query afișează TOATE postările

2 oct. 2014, 10:56:48
Vizualizări: 30.7K
Voturi: 4

Nu-mi dau seama de ce WP_Query afișează întotdeauna toate postările mele publicate, indiferent ce parametri pun în argumente.

<?php 

    $args = array('numberposts' => 1,
                    'meta_key' => 'display',
                    'meta_value' => 'about'
    );

    $about_preview_query = new WP_Query($args);

    if ($about_preview_query->have_posts()) {
        print "<h1>POSTĂRI GĂSITE</h1>";
    }

    while ($about_preview_query->have_posts()) {
        $about_preview_query->the_post();
        print "<h1>";
        the_title();

        print "</h1>";

    }
?>

Fac ceva greșit aici? După ce am citit documentația despre WP_Query() nu-mi dau seama unde greșesc, apreciez orice ajutor pe care îl pot primi.

Actualizare

Am încercat acest cod și încă primesc același răspuns. Toate postările sunt returnate în buclă.

    $args = array(
        'posts_per_page' => 1,
        'meta_query' => array(
            array(
                'key' => 'display',
                'value' => 'about',
                'compare' => '=',
             )
        ),
    );

Actualizare 2

Se pare că dacă afișez $about_preview_query->found_posts rezultatul este 1. Deci bănuiesc că este ceva în neregulă cu modul în care fac bucla postărilor:

<?php if ($about_preview_query->have_posts()): ?>

    <h1>Are <?php print $about_preview_query->found_posts ?> Postări</h1>

    <?php while ($about_preview_query->have_posts()): $about_preview_query->the_post(); ?>
        <h2><?php the_title(); ?></h2>
    <?php endwhile; ?>

<?php endif; ?>
6
Comentarii

Ai încercat să resetezi datele postului (postdata)?

Pieter Goosen Pieter Goosen
3 oct. 2014 10:43:05

Hei, mulțumesc pentru răspuns. Literal am încercat să pun wp_reset_postdata(); înaintea interogării mele cu o secundă înainte de comentariul tău. Totuși, am aceeași problemă unde afișează toate postările.

Mark Winterbottom Mark Winterbottom
3 oct. 2014 10:46:51

După interogarea ta, fă un var_dump în interiorul unui tag pre și vezi ce returnează interogarea ta. Exemplu ?><pre><?php var_dump($about_preview_query); ?></pre><?php

Pieter Goosen Pieter Goosen
3 oct. 2014 10:51:12

Ciudat, chiar dacă numărul found_posts este 1, var dump sugerează că interogarea returnează toate postările :S.

Mark Winterbottom Mark Winterbottom
3 oct. 2014 10:57:36

Atunci există postări injectate din altă parte. Undeva rulezi interogări personalizate care nu au fost resetate. Ar putea fi chiar dintr-o instanță a pre_get_posts

Pieter Goosen Pieter Goosen
3 oct. 2014 11:06:18

M-am gândit, doar ca verificare, elimină-ți meta_query și lasă doar parametrul posts_per_page și testează să vezi dacă returnează același comportament. Verifică și filtrele sau funcțiile personalizate care ar putea injecta postări în array-ul returnat cu postul tău

Pieter Goosen Pieter Goosen
3 oct. 2014 11:48:17
Arată celelalte 1 comentarii
Toate răspunsurile la întrebare 3
0

Este pentru că furnizați argumente incorecte. Folosiți argumentele corecte pentru WP_Query().

De asemenea, consultați parametrii câmpurilor personalizate

Încă ceva, va trebui să folosiți cod precum:

$args = array(
    'posts_per_page' => 5,
    'meta_query' => array(
        array(
            'key'     => 'display',
            'value'   => 'about',
            'compare' => '=', // (Citiți toți operatorii de comparație la linkul furnizat)
        ),
    ),
);
2 oct. 2014 11:25:18
0

Nu există niciun parametru pentru numberposts. Folosește posts_per_page în schimb. Deci codul tău va deveni...

<?php 

    $args = array(
        'posts_per_page' => 1,
        'meta_key' => 'display',
        'meta_value' => 'about'
    );

    $about_preview_query = new WP_Query($args);

    if ( $about_preview_query->have_posts() ) {
        print "<h1>POSTĂRI GĂSITE</h1>";
    }

    while ( $about_preview_query->have_posts() ) {
        $about_preview_query->the_post();
        print "<h1>";
        the_title();
        print "</h1>";
    }
?>
2 oct. 2014 11:11:33
1

Tot ce trebuie să faci este să schimbi

'posts_per_page' => 1,

în

'posts_per_page' => -1,
26 iun. 2017 15:53:27
Comentarii

-1 va returna toate articolele.

Picard Picard
26 iun. 2017 17:09:01