统计有多少帖子设置了自定义字段

时间:2011-02-21 作者:quis

我在模板中添加了一些代码,这些代码会自动添加自定义字段,以缓存每篇文章拉入的一些数据。有没有办法跟踪有多少帖子设置了这个自定义字段?

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

您可以使用以下命令运行自定义查询,以统计具有给定键的帖子数量$wpdb 或更具体地使用get_var(). 如果我假设您想用给定的键统计已发布的帖子,那么下面的内容应该可以做到这一点。。(尽管这只是一个例子)。

function get_meta_count( $key = \'\', $type = \'post\', $status = \'publish\' ) {
    global $wpdb;
    // Example code only
    // Good idea to add your own arg checking here
    if( empty( $key ) )
        return;
    $r = $wpdb->get_var( $wpdb->prepare( "
        SELECT COUNT(*) as count FROM {$wpdb->postmeta} pm
        LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id 
        WHERE pm.meta_key = \'%s\' 
        AND p.post_status = \'%s\' 
        AND p.post_type = \'%s\'
    ", $key, $status, $type ) );
    return $r;
}
根据需要回显或存储返回的值。如果您打算传入用户请求或发送的任何数据,则需要在函数中添加一些进一步的数据检查。

NOTE: 如果您在管理页面上执行此操作,那么可能有一个内部函数可以使用(我现在不记得具体是哪个,但如果您需要管理方面的内容,我会查找它)。

希望在任何情况下都能有所帮助。

Addition:Viper发帖后,我很好奇这两个查询之间会有多大差异,所以我每次都打了5次电话,并记录了时间。。

$wdbb->get_var 

Script Execution Time: 0.004 seconds
Script Execution Time: 0.004 seconds
Script Execution Time: 0.004 seconds
Script Execution Time: 0.004 seconds
Script Execution Time: 0.004 seconds

// Yes i realise the results are all the same above, that\'s how they came out

get_posts() 

Script Execution Time: 0.035 seconds 
Script Execution Time: 0.04 seconds 
Script Execution Time: 0.03 seconds
Script Execution Time: 0.027 seconds
Script Execution Time: 0.04 seconds 
我会注意到get_posts 给了一个找不到的meta\\u键,然后返回的结果更接近$wpdb 速度,但仍低于$wpdb 方法每次至少快2倍。

认为我的结果有缺陷吗?请执行您自己的测试,如果您想要我使用的代码的副本,您可以在裸体形式中找到它here.

Viper确实有一个有效的观点(未来证明总是一件好事),我只是想说明这两种方法之间存在一些可衡量的差异(如果有人发现我的方法有问题,请随时告诉我)。

SO网友:Viper007Bond

我建议使用get_posts(). 它将比直接查询数据库消耗更多的内存,因为它将返回完整的post对象,但它的优点是在使用API时基本上是经得起未来考验的。

$meta_posts = get_posts( \'meta_key=foobar\' );
$meta_post_count = count( $meta_posts );
unset( $meta_posts);
请参见query_posts() 文档中提供了您可以使用的参数的完整列表和大量优秀的示例。

结束