当我使用get_query_var时,我看到的随机字符串是什么?

时间:2017-11-16 15:10:37

标签: php wordpress advanced-custom-fields

我正在设置一个带有ACF字段的高级搜索页面,其中包含wordpress中的自定义帖子类型。

在我的例子中,我正在发送“学生”#39; in?licenseType =学生

Search Example

我已经注册了我的query_vars

 add_filter( 'query_vars', 'software_register_query_vars' );
 function software_register_query_vars( $vars ) {
    $vars[] = 'licenseType';
  return $vars;
 } 

并设置我的pre_get_posts过滤器

add_action('pre_get_posts','software_pre_get_posts');
function software_pre_get_posts( $query ) {
  if ( is_main_query() && $query->get('post_type') == 'uc_software' ) {
    $query->set('nopaging','true');  
    $query->set( 'orderby', 'title' ); 
    $query->set( 'order', 'ASC' ); 

    $meta_query = array(); 

    if( !empty( get_query_var( 'licenseType' ) ) ){
    $meta_query[] = array( 'key' => 'software_license_type', 'value' => 
    get_query_var( 'licenseType' ), 'compare' => 'LIKE' );
    }
// ...
//I will add more fields here...
// ...  
    if( count( $meta_query ) > 1 ){
      $meta_query['relation'] = 'AND';
    }

    if( count( $meta_query ) > 0 ){
      $query->set( 'meta_query', $meta_query );
    }   
  }
}

当我查看正在创建的查询时,我看到了

SELECT wp_125_posts.* FROM wp_125_posts INNER JOIN wp_125_postmeta ON ( 
wp_125_posts.ID = wp_125_postmeta.post_id ) WHERE 1=1 AND ( ( 
wp_125_postmeta.meta_key = 'software_license_type' AND 
wp_125_postmeta.meta_value LIKE 
 '{4d69cec85576e5c23416d1afb6df73c1a4a288f24aff1da852b18ad70b464309}Students{4d69cec85576e5c23416d1afb6df73c1a4a288f24aff1da852b18ad70b464309}' 
) ) AND wp_125_posts.post_type = 'uc_software' AND (wp_125_posts.post_status = 'publish' 
OR wp_125_posts.post_status = 'acf-disabled' OR wp_125_posts.post_status = 'private') 
GROUP BY wp_125_posts.ID ORDER BY wp_125_posts.post_title ASC

与query_var一起捕获的随机字符串是什么?有没有办法可以在没有它的情况下检索我的query_var?当我使用$ _GET [' licenseType']时,我看到同样的事情。

2 个答案:

答案 0 :(得分:1)

我遇到了同样的情况,但对我来说从 LIKE 更改为 = 不是一个选择。

对于仍然需要使用 LIKE 的任何人,您可以使用 wpdb::remove_placeholder_escape() 将这些随机字符串转义回 %

答案 1 :(得分:0)

我的问题已在wordpress.stackexchange

上得到解答

“这是元查询值中包含%字符的症状。由于4.8.3%的字符被转义(实际上被半随机字符串替换),并且应该在执行sql查询之前未转义。”

我还发现“当使用'LIKE'的meta_compare值时,WordPress会自动在meta_value字符串周围包装通配符(%)。”

我将比较运算符从LIKE更改为=并删除了随机字符串。