如题,我们在使用wordpress进行相关定制开发时,可能会遇到程序内置的查询无法满足我们实际数据查询需求,所以就需要我们通过定制mysql语句来进行相关的查询。
wordpress使用sql查询的方法:
1、先定义全局类:
global $wpdb;
2、通过$wpdb类来查询相关的数据;
$wpdb提供了多种查询方法: 如:get_results 直接返回查询结果,get_rows返回多行,get_var返回单个值等。
我们这里不过多的描述基础,直接上代码:
下面是一段查询一段时间内热门文章的代码,是根据文章评论数量来判断是否热门:
function most_comm_posts($days=30, $nums=5) {
global $wpdb;
date_default_timezone_set("PRC");
$today = date("Y-m-d H:i:s");
$daysago = date( "Y-m-d H:i:s", strtotime($today) - ($days * 24 * 60 * 60 * 10) );
$result = $wpdb->get_results("SELECT comment_count, ID, post_title, post_date FROM $wpdb->posts WHERE post_date BETWEEN '$daysago' AND '$today' and post_type='post' and post_status='publish' ORDER BY comment_count DESC LIMIT 0 , $nums");
$output = '';
if(empty($result)) {
$output = '<li>暂时没有数据</li>';
} else {
foreach ($result as $topten) {
$postid = $topten->ID;
$title = $topten->post_title;
$commentcount = $topten->comment_count;
if ($commentcount >= 0) {
$output .= '<a class="list-group-item visible-lg" title="'. $title .'" href="'.get_permalink($postid).'" rel="bookmark"><i class="fa fa-book"></i> ';
$output .= strip_tags($title);
$output .= '</a>';
$output .= '<a class="list-group-item visible-md" title="'. $title .'" href="'.get_permalink($postid).'" rel="bookmark"><i class="fa fa-book"></i> ';
$output .= strip_tags($title);
$output .= '</a>';
}
}
}
echo $output;
}
以上代码是获取到了一段时间内所有分类的热门文章,我们现在的需求是热门文章排除分类ID 为29的文章;通过系统查询很容易实现,不过在sql语句内如何实现呢,直接上代码:
欢迎访问秀主题博客,分享简单实用WP教程$result = $wpdb->get_results("SELECT comment_count, ID, post_title, post_date FROM $wpdb->posts WHERE post_date BETWEEN '$daysago' AND '$today' and post_type='post' and post_status='publish' and ($wpdb->posts.ID NOT IN (SELECT object_id FROM $wpdb->term_relationships WHERE term_taxonomy_id IN (29) ) ) ORDER BY comment_count DESC LIMIT 0 , $nums");
原理,我们这里使用了关联查询,wp_term_relationship表记录了文章ID和分类ID对应关系,所以,我们在where语句后面跟上了 not in 方法,来排除分类为29的文章。