запрос сообщений() ВСЕГДА что-то отображает?


Хорошо, я использую posts_query() для отображения сообщений.

Проблема в том, что, по крайней мере в моем случае, posts_query() всегда что-то выводит.

Например:

<?php

    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    query_posts("posts_per_page=1&paged=$paged");
    global $more;
    $more = 0;

    while ( have_posts() ) : the_post(); ?>    
        <!--- DO NOTHING ! -->
    <?php endwhile ?>

Отображает необработанную первую часть поста (и без $more =0 весь пост).

Почему это происходит?

Я хочу самостоятельно оформить вывод, но не могу, потому что, например:

while ( have_posts() ) : the_post(); ?>    
         <h1><?php the_title();?></h1>
         <h3><?php the_content( __( '') ); ?></h3>
<?php endwhile ?>

Дает:

<h1>MyTitle</h1>
<h3>something something something something something</h3>
<p>something something something something something</p> <!-- (wherethis line comes from? ;/) ?>

PS.

Кроме того, я почти уверен разбивка на страницы не работает так же хорошо, и я считаю, что так и должно быть? У меня есть около 15 сообщений для отображения, я выбрал 1, почему нет навигатора? :(

Точный код:

function posts_shortcode( $atts ) {
     extract( shortcode_atts( array(
        ), $atts ) );  

        query_posts("posts_per_page=1");
        global $more;
        $more = 0;

        while ( have_posts() ) : the_post(); ?>    
         <h1><?php the_title();?></h1>
         <h3><?php the_content( __( '') ); ?></h3>
         <?php endwhile;
}

add_shortcode('posts', 'posts_shortcode');  
Author: Wordpressor, 2011-03-06

2 answers

Query_posts() ВСЕГДА что-то отображает?

Нет, это не так, по крайней мере, не для меня, я попробовал код, который вы опубликовали в моей дочерней теме, и не смог воспроизвести описанную проблему.

Во-первых, я попытался...

while ( have_posts() ) : the_post(); ?>    
    <!--- DO NOTHING ! -->
<?php endwhile ?>

..и ничего не получил, поэтому я затем проверил..

<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts("posts_per_page=1&paged=$paged");
global $more;
$more = 0;

while ( have_posts() ) : the_post(); ?>    
         <h1><?php the_title();?></h1>
         <h3><?php the_content( __( '') ); ?></h3>
<?php endwhile ?>

..который произвел..

<h1>Post title</h1>
<h3><p>post content</p></h3>

Ни одного случайного абзаца содержания.

Если бы мне пришлось угадывать проблему, я бы сказал, что в работе плохо закодированный фильтр или шорткод. Самый простой способ изолировать причину (как и при любом устранении неполадок WP) - отключить плагины и/или переключить тему и сузить круг причин, вызывающих проблему.

ОБНОВЛЕНИЕ:
Используйте новый объект WP_Query вместо query_posts, и это должно устранить проблему.

function posts_shortcode( $atts ) {
    extract( shortcode_atts( array(
    ), $atts ) );  
    global $more, $wp_query;
    $args = array( 
      'posts_per_page' => 1,
      'paged' => get_query_var('paged')
    );
    $q = new WP_Query;
    $q->query( $args );

    // Backup $wp_query
    $backup = $wp_query;
    // Fill $wp_query with the custom query
    $wp_query = $q;

    // Do the loop
    while ( $q->have_posts() ) : 
      $q->the_post(); 
      $more = 0;
    ?>    

    <h1><?php the_title();?></h1>
    <h3><?php the_content( __( '') ); ?></h3>

    <?php 
    endwhile;

    // Output page navi
    wp_pagenavi();

    // Restore $wp_query
    $wp_query = $backup;

    // Restores wp_query global and also resets postdata(may not be needed, but won't hurt)
    wp_reset_query(); 
}

add_shortcode('posts', 'posts_shortcode'); 
 1
Author: t31os, 2011-03-08 09:35:00

Происходит ли то же самое, если вы используете the_post() без , в то время как цикл? Происходит ли то же самое, если вы не используете пользовательский вызов query_posts()?

Это ужасно похоже на плохо закодированный фильтр где-то в цепочке, но по нему трудно угадать местоположение.

Вы можете попробовать этот код для сброса имен фильтров по мере их выполнения и попытаться определить, что может вызвать это:

add_filter('all','dump_name',10,0);

function dump_name() {

    var_dump(current_filter());
}
 1
Author: Rarst, 2011-03-06 19:43:06