WP_QUERY生成的SQL查询与请求回显的内容不同

时间:2019-06-19 作者:user170270

给定此代码:

    $args = array(
        \'post_type\' => \'post\',
        \'post_status\' => \'publish\',
        \'cat\' => $cat,
        \'orderby\' => \'date\',
        \'order\' => \'DESC\',
        \'publish_from\' => 1,
        \'publish_to\' => 1,
        \'s\' => $s,
        \'tag\' => $tag,
        \'paged\' => (int)$next,
        \'posts_per_page\' => (int)$ppp
    );
    $query = new WP_Query($args);
    echo $query->request.\'!<br>\';
    $query = $query->get_posts();
    echo sizeof($query);die;
它响应以下SQL:

选择SQL\\u CALC\\u FOUND\\u ROWS wp\\u 16\\u posts。*来自wp\\U 16\\u posts,其中1=1和(wp\\U 16\\u posts.publish\\u to为NULL或wp\\U 16\\u posts.publish\\u to>now())和(wp\\U 16\\u posts.publish\\u FROM为NULL或wp\\U 16\\u posts.publish\\u FROM<;now())和((wp\\U 16\\u posts.post\\u标题,如{77B35C99DeebCD176E45C5740DC2F7ADF3F48C63D743D524469D616873C4C4}rosszkor233{bcd176e45c5740dc2f5707adf3f48c63f743d524469d616873c4})或(wp\\u 16\\u posts.post\\u摘录LIKE\'{77B35C99Deebcd176E45C5740DC2F5707ADF3F48C63F743D524469D616873C4}rosszkor233{77B35C99Deebcd176E45C5740DC2F5707ADF3F48C63F743D6469D616873C4}或(wp\\u 16\\u posts.post\\u内容,如{77B35C99Deebcd176E45C5740DC2F577ADF3F48C63F743D524469D616873C433}rosszkor233{BCD176E45C5740DC2F5707ADF3F48C63F743D524469D616873C4})和wp\\U 16\\U岗位。post\\U类型=“post”和((wp\\u 16\\u posts.post\\u status=“publish”))按wp\\u 16\\u posts排序。post\\u日期描述限制0,8

在SQL浏览器中运行此操作时,不会返回任何结果。但在上面,我重复了结果的长度-它是8!所以WP\\u Query无法运行我看到的SQL。。。可能有什么问题?这是最新的WordPress

1 个回复
SO网友:Jacob Peattie

$wp_query->result 不是查询的最后阶段。它需要通过$wpdb 正确执行。

主要问题是LIKE 通配符% 都没有逃脱。如果更换{77b35c9 etc.} 字符集,包括括号,带有% 您应该得到大致的最终查询:

SELECT SQL_CALC_FOUND_ROWS wp_16_posts.* FROM wp_16_posts WHERE 1=1 AND (wp_16_posts.publish_to IS NULL OR wp_16_posts.publish_to > now()) AND (wp_16_posts.publish_from IS NULL OR wp_16_posts.publish_from < now()) AND (((wp_16_posts.post_title LIKE \'%rosszkor233%\') OR (wp_16_posts.post_excerpt LIKE \'%rosszkor233%\') OR (wp_16_posts.post_content LIKE \'%rosszkor233%\'))) AND wp_16_posts.post_type = \'post\' AND ((wp_16_posts.post_status = \'publish\')) ORDER BY wp_16_posts.post_date DESC LIMIT 0, 8

相关推荐