将客户WP查询参数转换为SQL结果

时间:2017-11-01 作者:Ivo Poe

我对自定义WP\\U查询有问题。查询参数包括:

$args = array(
    \'posts_per_page\' => -1,
    \'post_type\'      => \'adressen\',
    \'orderby\'        => \'title\',
    \'order\'          => \'ASC\',
    \'meta_query\'     => array(
        \'relation\' => \'AND\',
        array(
            \'key\'     => \'adresse_anzeigen_%_anzeige_branche\',
            \'compare\' => \'LIKE\',
            \'value\'   => $clientId
        ),
        array(
            \'key\'     => \'adresse_anzeigen_%_anzeige_aktiv\',
            \'compare\' => \'=\',
            \'value\'   => "1"
        )
    )
);
(元键模式是从高级自定义字段预定义的)

我在WP\\u查询对象转储中遇到的问题,WordPress将其转换为:

SELECT wp_2_posts.* FROM wp_2_posts
INNER JOIN wp_2_postmeta ON ( wp_2_posts.ID = wp_2_postmeta.post_id )
INNER JOIN wp_2_postmeta AS mt1 ON ( wp_2_posts.ID = mt1.post_id )
WHERE 1=1 AND
( 
    (
        wp_2_postmeta.meta_key = \'adresse_anzeigen_{783ec3ed63725295bd6fd75a91ca47bfebd15fa5b4aac1ab7eafd49f682034e6}_anzeige_branche\' AND
        wp_2_postmeta.meta_value LIKE \'{783ec3ed63725295bd6fd75a91ca47bfebd15fa5b4aac1ab7eafd49f682034e6}203{783ec3ed63725295bd6fd75a91ca47bfebd15fa5b4aac1ab7eafd49f682034e6}\'
    )
    AND 
    (
        mt1.meta_key = \'adresse_anzeigen_{783ec3ed63725295bd6fd75a91ca47bfebd15fa5b4aac1ab7eafd49f682034e6}_anzeige_aktiv\' AND
        mt1.meta_value = \'1\'
    )
)
AND wp_2_posts.post_type = \'adressen\'
AND
(
    wp_2_posts.post_status = \'publish\' OR
    wp_2_posts.post_status = \'acf-disabled\' OR
    wp_2_posts.post_status = \'private\'
)
GROUP BY wp_2_posts.ID
ORDER BY wp_2_posts.post_title ASC
%号和引号不是数字?有人能解释一下原因吗?

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

作为dev note for 4.8.3 意味着,您需要使用$wpdb->remove_placeholder_escape 方法类似于

global $wpdb;
add_filter(\'posts_request\',array($wpdb, \'remove_placeholder_escape\'));
非常未经测试。

SO网友:Milan Petrovic

这是自WP 4.8.3以来的正常行为,其中%符号被编码以防止某些形式的SQL注入。下面是关于它的讨论,其他用户报告了相同的问题:4.8.3 prepare update.

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post