私はこのコードをpage.phpに持っています、そしてそれは私の家のためのテンプレート部分を呼び出します。 home.phpの中で私はWP_Queryの代わりにquery_postsを使い、それを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
それは何も返しません。
そしてこれがwp_queryを使って出てくるものです
何をしたらいいでしょう?コードに問題がありますか?私を助けてください。ありがとうございました。
query_posts
ではなくWP_Query
で結果が得られる理由はありません。 query_posts
はWP_Query
を使用するので、両方とも同じように動作するはずです。
あなたのコードは本当に面倒であり、あなたはあなたのコードをデバッグするのを難しくする複数の構文を使っています。これは明らかなバグを隠し、不必要な野生のガチョウの追跡にあなたを本当に導きます。また、引数をデフォルト値で設定する必要はありません。
コードを読みやすく信頼性の高いものに書き換えてください。
/**
* 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
}
生成されたSQLクエリを検査するためにecho $custom_query->request
を実行できます。あるいは、完全なクエリオブジェクトを検査するためにvar_dump( $custom_query )
を実行できます。また、デバッグをオンにして明らかなバグを探す必要があります。
しかし、私が言ったように、query_posts
が機能し、WP_Query
が機能しない理由はないはずです。