it-swarm.com.de

Ändern Sie query_posts auf der Seite in WP_Query, funktioniert aber nicht

Ich habe diesen Code in page.php und er ruft den Template-Teil für mein Zuhause auf. In der home.php habe ich query_posts anstelle von WP_Query verwendet und wollte es in WP_Query ändern.

Ich habe versucht, es zu ändern, aber es funktioniert nicht mehr.

Dies ist der vorherige Code, der query_posts verwendet und funktioniert:

    $args = array(
                'post_type' => 'post',     
                  "orderby"   => "date",
                  "order"     => "DESC",
                  "posts_per_page" => 24,
                'tax_query' => array(
                      'relation' => 'AND',
                               array(
                                 'taxonomy' => 'category',
                                 'terms' => 'uncategorized',
                                 'field' => 'slug'
                               ),
                           array(
                             'taxonomy' => 'creatives-content-types',
                             'terms' => 'newsfeed',
                             'field' => 'slug'
                           )
                        )
                    );
            query_posts($args);
            $count = 0;

            $html_col_o =  '<div>';
            $html_col_t =  '<div>';
            $html_col_th =  '<div>';
            while ( have_posts() ) : the_post();
                $count++;
                $image = get_field('featured_image', $post->ID);
                $size = 'large';            
                $image_url = $image['sizes'][$size];

                $description ="<h2>".get_the_title()."</h2>".get_field('description',$post->ID);
                if($count%3 == 1){
                    $html_col_o = $html_col_o. '<img src="'.$image_url.'" id="img-'.$count.'" data-count="'.$count.'" data-description="'.$description.'"/>';
                } else if($count%3 == 2){
                    $html_col_t = $html_col_t. '<img src="'.$image_url.'" id="img-'.$count.'" data-count="'.$count.'" data-description="'.$description.'"/>';
                } else if($count%3 == 0){
                    $html_col_th = $html_col_th. '<img src="'.$image_url.'" id="img-'.$count.'"  data-count="'.$count.'" data-description="'.$description.'"/>';
                }
            endwhile;

                $html_col_o =  $html_col_o.'</div>';
                $html_col_t =  $html_col_t.'</div>';
                $html_col_th =  $html_col_th.'</div>';
            echo $html_col_o.$html_col_t.$html_col_th;
        ?>

Und dies ist die transformierte mit WP_Query, funktioniert aber nicht:

    $args = array(
                        'post_type' => 'post',     
                          "orderby"   => "date",
                          "order"     => "DESC",
                          "posts_per_page" => 24,
                        'tax_query' => array(
                              'relation' => 'AND',
                               array(
                                 'taxonomy' => 'category',
                                 'terms' => 'uncategorized',
                                 'field' => 'slug'
                               ),
                           array(
                             'taxonomy' => 'creatives-content-types',
                             'terms' => 'newsfeed',
                             'field' => 'slug'
                           )
                        )
                    );
            $custom_query = new WP_Query($args);
            $count = 0;

            $html_col_o =  '<div>';
            $html_col_t =  '<div>';
            $html_col_th =  '<div>';
            while ( $custom_query->have_posts() ) : $custom_query->the_post();
                $count++;
                $image = get_field('featured_image', $custom_query->$post->ID);
                $size = 'large';            
                $image_url = $image['sizes'][$size];

                $description ="<h2>".get_the_title()."</h2>".get_field('description',$custom_query->$post->ID);
                if($count%3 == 1){
                    $html_col_o = $html_col_o. '<img src="'.$image_url.'" id="img-'.$count.'" data-count="'.$count.'" data-description="'.$description.'"/>';
                } else if($count%3 == 2){
                    $html_col_t = $html_col_t. '<img src="'.$image_url.'" id="img-'.$count.'" data-count="'.$count.'" data-description="'.$description.'"/>';
                } else if($count%3 == 0){
                    $html_col_th = $html_col_th. '<img src="'.$image_url.'" id="img-'.$count.'"  data-count="'.$count.'" data-description="'.$description.'"/>';
                }
            endwhile;

                $html_col_o =  $html_col_o.'</div>';
                $html_col_t =  $html_col_t.'</div>';
                $html_col_th =  $html_col_th.'</div>';
            echo $html_col_o.$html_col_t.$html_col_th;

Als ich versuchte hinzuzufügen: echo "count:". $ Custom_query-> found_posts

es gibt nichts zurück.

Die Beispielausgabe: (Richtige unter Verwendung von query_posts)  Correct output using query_posts 

Und genau das kommt mit wp_query heraus

 enter image description here 

Was werde ich tun? Stimmt etwas mit meinem Code nicht? Bitte hilf mir. Danke dir.

1
karlo jay bueno

Es sollte keinen Grund geben, warum Sie mit query_posts und nicht mit WP_Query Ergebnisse erzielen sollten. query_posts verwendet WP_Query, daher sollten beide gleich funktionieren.

Ihr Code ist sehr unübersichtlich und Sie verwenden mehrere Syntaxen, wodurch sich Ihr Code nur schwer debuggen lässt. Dies führt dazu, dass offensichtliche Fehler ausgeblendet werden und unnötige Verfolgungsjagden eingeleitet werden. Es ist auch nicht erforderlich, Argumente mit ihren Standardwerten festzulegen.

Lassen Sie uns Ihren Code in etwas lesbareres und zuverlässigeres umschreiben.

/**
 * Set the query arguments we will use to get posts by
 * Since PHP 5.4 we can use short array syntax, so we can use []
 * instead of array(). You should be on PHP 5.6 already and should not 
 * be using any version prior to 5.6
 */
$args = [ 
    'posts_per_page'   => 24,
    'suppress_filters' => true, // Do not let filters change the query
    'tax_query'        => [
        [ // Removed the relation as AND is default value
            'taxonomy' => 'category',
            'terms'    => 'uncategorized',
            'field'    => 'slug'
        ],
        [
            'taxonomy' => 'creatives-content-types',
            'terms'    => 'newsfeed',
            'field'    => 'slug'
        ]
    ]
];
$custom_query = new WP_Query($args);

if ( $custom_query->have_posts() ) { // Always first make sure you have posts to avoid bugs
    $count = 0;

    $html_col_o  = '<div>';
    $html_col_t  = '<div>';
    $html_col_th = '<div>';

    while ( $custom_query->have_posts() ) {
        $custom_query->the_post();

        $count++;
        $image     = get_field( 'featured_image', get_the_ID() ); // Use get_the_ID() for reliability

        if ( $image ) { //Make sure we have an image to avoid bugs or unexpected output
            $size      = 'large';           
            $image_url = $image['sizes'][$size];

            $description = '<h2>' . get_the_title() . '</h2>' . get_field( 'description', get_the_ID() ); // Again, use get_the_ID()

            if( $count%3 == 1 ) {
                $html_col_o  = $html_col_o  . '<img src="' . $image_url . '" id="img-' . $count . '" data-count="' . $count . '" data-description="' . $description . '"/>';
            } elseif( $count%3 == 2 ) {
                $html_col_t  = $html_col_t  . '<img src="' . $image_url . '" id="img-' . $count . '" data-count="' . $count . '" data-description="' . $description . '"/>';
            } elseif( $count%3 == 0 ) {
                $html_col_th = $html_col_th . '<img src="' . $image_url . '" id="img-' . $count . '" data-count="' . $count . '" data-description="' . $description . '"/>';
            }

        }
    }

    $html_col_o  = $html_col_o  . '</div>';
    $html_col_t  = $html_col_t  . '</div>';
    $html_col_th = $html_col_th . '</div>';

    echo $html_col_o . $html_col_t . $html_col_th;

    wp_reset_postdata(); // VERY VERY IMPORTANT, restes the $post global back to the main query
}

Sie können jetzt echo $custom_query->request ausführen, um die generierte SQL-Abfrage zu überprüfen. Alternativ können Sie var_dump( $custom_query ) ausführen, um das gesamte Abfrageobjekt zu überprüfen. Sie sollten auch das Debugging einschalten und nach offensichtlichen Fehlern suchen.

Aber wie gesagt, es sollte keinen Grund geben, warum query_posts funktioniert und WP_Query nicht

1
Pieter Goosen