Измените query_posts на WP_Query на странице, но не работает

У меня этот код в page.php, и он вызывает часть шаблона для моего дома. Внутри home.php я использовал query_posts вместо WP_Query, и я хотел изменить его в WP_Query.

Я попытался изменить его, но он больше не работает.

Это предыдущий код с использованием query_posts, который работает:

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

И это преобразованный с WP_Query, но не работает:

  $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; 

Когда я попытался добавить: echo "count:". $ Custom_query-> found_posts

он ничего не возвращает.

Пример вывода: (исправить один с помощью query_posts) Корректный вывод с использованием query_posts

И вот что получается с помощью wp_query

введите описание изображения здесь

Что мне делать? что-то не так с моим кодом? Пожалуйста, помогите мне. Спасибо.

Solutions Collecting From Web of "Измените query_posts на WP_Query на странице, но не работает"

Не должно быть причин, по которым вы должны получать результаты с помощью query_posts а не с WP_Query . query_posts использует WP_Query , поэтому оба должны работать одинаково.

Ваш код действительно беспорядочен, и вы используете синтаксисы miltiple, которые делают ваш код сложным для отладки. Это скрывает очевидные ошибки и действительно посылает вас на ненужные дикие гусиные погони. Кроме того, нет необходимости устанавливать аргументы со значениями по умолчанию.

Позволяет переписать ваш код на что-то более читаемое и более надежное.

 /** * 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 } 

Теперь вы можете выполнить echo $custom_query->request для проверки сгенерированного SQL-запроса, var_dump( $custom_query ) вы можете сделать var_dump( $custom_query ) для проверки всего объекта запроса. Вы также должны включить отладку и искать очевидные ошибки.

Но, как я сказал, не должно быть причин, по которым query_posts а WP_Query не