使用相同的LOOP参数对数据库进行查询

时间:2018-03-14 作者:Marcelo Henriques Cortez

所以,我有一个很好的循环。

但我需要计算该循环有多少帖子,我需要通过对DB的查询来完成。

我的循环看起来像:

$adsArg = array(
    \'offset\'             => $offset,
    \'post_type\'          => \'ads\',
    \'meta_key\'           => $metaKey,
    \'tax_query\'          => $taxQuery,
    \'meta_query\'         => $metaValue,
);
$adsQuery = new WP_Query($adsArg);
到目前为止,我的查询如下所示:

$wpdb->get_var($wpdb->prepare("SELECT COUNT(ID) FROM " . $table_name . " WHERE post_type = \'ads\' AND post_status = \'publish\' AND tax_query = " . $taxQuery . " AND meta_query = " . $metaValue . ", array() ) );
这不起作用,我不知道该怎么做。

计数器必须以这种方式进行,并直接查询数据库。

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

要获取帖子数量,无需再次查询即可轻松完成

$adsQuery->post_count;
但如果有什么原因的话(我想知道背景!)我无法理解同一个查询必须运行两次并直接到数据库,才能回答您的问题,即为什么它不起作用:

已经$table_name 是否已定义?您正在使用{$wpdb->prefix}_posts{$wpdb->posts} 在里面$table_name?

您周围没有sql字符串值引号$taxQuery$metaValue 值,因此这将中断查询,除非它们是整数

已经$wpdb 是否已在全球范围内宣布?

您正在使用$wpdb->print_error() 显示问题?

如果您回显了字符串查询而不是运行它,它看起来像您所期望的吗?缺少什么?如果将其粘贴到phpmyAdmin/sqlworkbench中,是否会显示问题?

服务器错误日志中是否有任何错误?mysql错误日志?

我建议如下

<?php
global $wpdb;

$query = "
    SELECT COUNT(ID) 
    FROM   {$wpdb->posts}
    WHERE  post_type = \'ads\' 
           AND post_status = \'publish\' 
           AND tax_query = \\"%s\\"
           AND meta_query = \\"%s\\"";

// show query
// echo "<pre>{$query}</pre>";

$count = $wpdb->get_var( $wpdb->prepare( 
    $query, 
    $taxQuery,
    $metaValue
));



echo "<pre>";
if($wpdb->last_error !== \'\') {
   echo " ERROR: ";
   $wpdb->print_error();
} else {
   echo "Count: {$count}";
}
echo "</pre>";

SO网友:Marcelo Henriques Cortez

由于我在问题中遗漏了一个细节,我同意David Sword的回答,因为它帮助我按照我的提问方式正确地连接到数据库。

但在我的具体案例中,“post\\u count”不起作用,因为它考虑了“offset”和“post per page”属性。

因为我需要查询中的所有帖子,所以我必须使用“found\\u posts”。

例如:$adskquery->found\\u posts;

这个钩子在开发自定义分页时特别有用。例如,如果您在查询中声明自定义偏移量值,WordPress将不会从$wp\\u query->found\\u posts参数中扣除偏移量(例如,如果偏移量为10后有45篇可用的帖子,WordPress将忽略该偏移量,并仍然为found\\u posts提供55的值)。

https://codex.wordpress.org/Plugin_API/Filter_Reference/found_posts

https://codex.wordpress.org/Class_Reference/WP_Query

Thnx还感谢@JacobPeattie指出我应该尝试修复“post\\u count”问题。

结束

相关推荐

Loading jquery locally

除了通过链接加载jquery,还有其他方法吗:<script src=\"https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.1/jquery.min.js\"></script> 我试过这个:<?php wp_enqueue_script(\"jquery\"); ?> <?php wp_head(); ?> 但是当我使用wp\\u enqueue\\u脚本(“jque