使用新的 wp_query 将 sql 查询转换为 wordpress 查询
Transofrm sql query to wordpress query with new wp_query
我正在尝试将 sql 查询转换为 wordpress 查询,但无法理解它是如何完成的?
我尝试转换为 new wp_query
的查询
$query = " SELECT SQL_CALC_FOUND_ROWS distinct wp_posts.ID
FROM wp_posts
INNER JOIN wp_postmeta
ON ( wp_posts.id = wp_postmeta.post_id )
INNER JOIN wp_postmeta AS mt1
ON ( wp_posts.id = mt1.post_id )
WHERE 1 = 1
AND wp_posts.id NOT IN ( 0 )
AND wp_posts.post_type = 'topic'
AND ( wp_posts.post_status = 'publish'
OR wp_posts.post_status = 'closed'
OR wp_posts.post_status = 'reported' )
AND ( wp_postmeta.meta_key = '_bbp_last_active_time')
GROUP BY wp_posts.id
ORDER BY wp_postmeta.meta_value DESC
LIMIT 0, 10
";
$topics = $wpdb->get_results($query, OBJECT);
所以我可以使用
while($topics->have_posts()) : $topics->the_post(); ?>
有点喜欢
$args = array(); // how do I convert to this.
$topics = new WP_query($args);
尝试:
$wpq = new WP_Query();
$wpq->parse_query($query);
$posts = $wpq->get_posts();
或使用标准 WP_Query 函数:
$wpq = new WP_Query($query);
我尝试了 bobdye 的解决方案,但事实证明它不起作用。据我所知,设置循环并使用 the_title()
、$post->ID
等的唯一方法是像这样工作:
global $post;
$sql_results = $wpdb->get_results( $sql_query, OBJECT);
if ($sql_results) {
foreach ($sql_results as $post) {
setup_postdata($post);
// You're in the loop now. You can access all the $post objects
// and functions like in any other wp loop.
// example: the_title();
}
wp_reset_postdata();
}
分页有一个问题。但我相信这个答案可以巧妙地解决它:
https://wordpress.stackexchange.com/questions/21626/pagination-with-custom-sql-query#28717
我正在尝试将 sql 查询转换为 wordpress 查询,但无法理解它是如何完成的?
我尝试转换为 new wp_query
$query = " SELECT SQL_CALC_FOUND_ROWS distinct wp_posts.ID
FROM wp_posts
INNER JOIN wp_postmeta
ON ( wp_posts.id = wp_postmeta.post_id )
INNER JOIN wp_postmeta AS mt1
ON ( wp_posts.id = mt1.post_id )
WHERE 1 = 1
AND wp_posts.id NOT IN ( 0 )
AND wp_posts.post_type = 'topic'
AND ( wp_posts.post_status = 'publish'
OR wp_posts.post_status = 'closed'
OR wp_posts.post_status = 'reported' )
AND ( wp_postmeta.meta_key = '_bbp_last_active_time')
GROUP BY wp_posts.id
ORDER BY wp_postmeta.meta_value DESC
LIMIT 0, 10
";
$topics = $wpdb->get_results($query, OBJECT);
所以我可以使用
while($topics->have_posts()) : $topics->the_post(); ?>
有点喜欢
$args = array(); // how do I convert to this.
$topics = new WP_query($args);
尝试:
$wpq = new WP_Query();
$wpq->parse_query($query);
$posts = $wpq->get_posts();
或使用标准 WP_Query 函数:
$wpq = new WP_Query($query);
我尝试了 bobdye 的解决方案,但事实证明它不起作用。据我所知,设置循环并使用 the_title()
、$post->ID
等的唯一方法是像这样工作:
global $post;
$sql_results = $wpdb->get_results( $sql_query, OBJECT);
if ($sql_results) {
foreach ($sql_results as $post) {
setup_postdata($post);
// You're in the loop now. You can access all the $post objects
// and functions like in any other wp loop.
// example: the_title();
}
wp_reset_postdata();
}
分页有一个问题。但我相信这个答案可以巧妙地解决它: https://wordpress.stackexchange.com/questions/21626/pagination-with-custom-sql-query#28717