使用WordPress进行数据库查询

时间:2013-02-07 作者:JasonDavis

我正在开发一个有主页滑块的Wordpress主题。我在Wordpress数据库中有一个表,用于存储帖子查看次数,我想让我的滑块显示查看次数最多的帖子。

这是获取顶部帖子的SQL,帖子ID

SELECT `post_id`, `single_views`
FROM `wp_ak_popularity`
ORDER BY `single_views`
DESC LIMIT 30
下面是我当前正在使用的Wordpress DB查询。

$featured = new WP_Query(
    array(
        \'no_found_rows\'             => TRUE,
        \'update_post_meta_cache\'    => FALSE,
        \'update_post_term_cache\'    => FALSE,
        \'ignore_sticky_posts\'       => 1,
        \'posts_per_page\'            => wpb_option(\'featured-slider-number\'),
        \'cat\'                       => wpb_option(\'featured-slider-category\')
    )
);
我在WordPress文档网站上看到,我可以用这样的东西来只查询我需要的帖子。。。

$featured  = new WP_Query( 
    array( 
        post_type\' => \'post\',
        \'post__in\' => array( 2, 5, 12, 14, 20 )
    )
);
我需要的帮助是如何进行第一个数据库查询,并将这些结果放入如下变量中

$post_ids = \'2, 5, 12, 14, 20\';
因此,我可以通过简单地传递我需要的Post ID来进行主数据库查询。

有人能告诉我如何获得第一个ID列表吗?

2 个回复
最合适的回答,由SO网友:birgire 整理而成

如果我理解正确,您可能会想要这样的东西:

global $wpdb;

$number=30; // EDIT this to your needs

$sql="SELECT post_id
FROM `wp_ak_popularity`
ORDER BY `single_views`
DESC LIMIT %d";

$my_top_posts = $wpdb->get_results($wpdb->prepare($sql,$number),ARRAY_N);
获取顶级帖子id的数组。

然后,您可以在WP\\U查询中使用此选项:

\'post__in\' => $my_top_posts

SO网友:Milo

看看wpdb class 在Codex中,这是您应该用来运行SQL查询的内容。

首先,您应该使用$wpdb->prefix 使用您的表名。用户可以更改前缀,多个站点可以使用不同的前缀共享同一个数据库。

因此,我们在这里查询数据库,然后循环结果,将post ID放入一个数组中。请注意,在您的示例中,创建一个字符串$post_ids = \'2, 5, 12, 14, 20\'; 除非你先exploded 将其放入一个数组中。

$table = $wpdb->prefix . \'ak_popularity\'
$query = "SELECT post_id, single_views
          FROM $table
          ORDER BY single_views DESC LIMIT 30";
$results = $wpdb->get_results( $query, ARRAY_A );
$post_ids = array();
foreach( $results as $row )
    $post_ids[] = $row[\'post_id\'];

结束

相关推荐

如何在Single.php中显示来自定制分类的定制字段?

我知道下面的mysql查询生成了我希望在single中响应的确切结果。php:SELECT meta_value FROM `wp_taxonomymeta` WHERE `taxonomy_id` =565 AND `meta_key` LIKE \'baseurl\' 首先,我需要能够使用$wpdb输出该结果,无论我尝试什么,我都无法让它工作。我的最后一次尝试:<?php global $wpdb; $toc = $wpdb->get_ro