it-swarm.com.de

query_posts () zeigt IMMER etwas an?

OK, ich verwende posts_query (), um Posts anzuzeigen.

Das Problem ist, zumindest in meinem Fall, dass posts_query () immer etwas ausgibt.

Zum Beispiel:

<?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 ?>

Zeigt den rohen ersten Teil eines Posts an (und ohne $ more = 0 den gesamten Post).

Warum passiert es?

Ich möchte die Ausgabe selbst gestalten, kann dies jedoch nicht. Beispiel:

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

Gibt:

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

PS.

Außerdem bin ich mir fast sicher, dass Paginierung nicht so gut funktioniert, und ich glaube, dass es so sein sollte? Ich habe ungefähr 15 Einträge angezeigt. Ich habe 1 ausgewählt. Warum gibt es kein Navi? :(

Der genaue Code:

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');  
1
Wordpressor

query_posts () zeigt IMMER etwas an?

Nein, zumindest nicht für mich. Ich habe den Code ausprobiert, den Sie in meinem untergeordneten Thema gepostet haben, und konnte das beschriebene Problem nicht reproduzieren.

Erstens habe ich versucht ...

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

..und nichts bekommen, also habe ich dann getestet ..

<?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 ?>

..was produziert ..

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

Kein streunender Absatz des Inhalts.

Wenn ich das Problem erraten müsste, würde ich sagen, dass es bei der Arbeit einen schlecht codierten Filter oder Shortcode gibt. Der einfachste Weg, um die Ursache einzugrenzen (wie bei jeder WP Fehlerbehebung), besteht darin, Plugins zu deaktivieren und/oder das Thema zu wechseln und einzugrenzen, was das Problem verursacht.

UPDATE:
Verwenden Sie anstelle von WP_Query ein neues query_posts-Objekt, um das Problem zu beheben.

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
t31os

Passiert dasselbe, wenn Sie the_post() ohne while loop verwenden? Passiert dasselbe, wenn Sie keinen benutzerdefinierten query_posts()-Aufruf verwenden?

Dies scheint furchtbar schlecht codierte Filter irgendwo in der Kette zu sein, aber es ist schwer, die Position davon zu erraten.

Sie können diesen Code verwenden, um die Namen der Filter während der Ausführung zu sichern und um herauszufinden, was die Ursache sein könnte:

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

function dump_name() {

    var_dump(current_filter());
}
1
Rarst