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

时间:2017-11-16 作者:Bridget Arrington

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

在我的示例中,我在url参数中发送“Students”作为?licenseType=学生

Search Example

*编辑添加PHP代码:

<select id="licenseType" name="licenseType">
<option value="">All License Types</option>
            <?php $field = get_field_object(\'software_license_type\');               
                    if( $field )
                    {
                        foreach( $field[\'choices\'] as $key => $value )
                        {
                            echo \'<option value="\'.$key.\'" \'.((isset($_GET[\'licenseType\']) && $_GET[\'licenseType\'] == $value)?\' selected\':\'\').\' >\'.$value.\'</option>\';
                        }
                    }
            ?></select>
我已注册query\\u vars

 add_filter( \'query_vars\', \'software_register_query_vars\' );
 function software_register_query_vars( $vars ) {
    $vars[] = \'licenseType\';
  return $vars;
 } 
并设置我的pre\\u get\\u 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
随my query\\u var一起捕获的随机字符串是什么?有没有一种方法可以在没有它的情况下检索query\\u var?当我使用$\\u GET[\'licenseType\']时,我看到了同样的情况。

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

这是患有% 元查询值中的字符。自4.8.3起% 正在转义字符(实际上由半随机字符串替换),应在执行sql查询之前取消转义。

您应该向插件作者咨询处理它的最佳方式,但在您的具体情况下,我想说,稍微重新设计您的代码将是比任何不可回避的代码更好的解决方案。LIKE 最好避免昂贵的操作,并且根据您的UI,您可以对值进行严格的比较。

结束

相关推荐

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

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

当我使用GET_QUERY_var时,我看到的随机字符串是什么? - 小码农CODE - 行之有效找到问题解决它

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

时间:2017-11-16 作者:Bridget Arrington

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

在我的示例中,我在url参数中发送“Students”作为?licenseType=学生

Search Example

*编辑添加PHP代码:

<select id="licenseType" name="licenseType">
<option value="">All License Types</option>
            <?php $field = get_field_object(\'software_license_type\');               
                    if( $field )
                    {
                        foreach( $field[\'choices\'] as $key => $value )
                        {
                            echo \'<option value="\'.$key.\'" \'.((isset($_GET[\'licenseType\']) && $_GET[\'licenseType\'] == $value)?\' selected\':\'\').\' >\'.$value.\'</option>\';
                        }
                    }
            ?></select>
我已注册query\\u vars

 add_filter( \'query_vars\', \'software_register_query_vars\' );
 function software_register_query_vars( $vars ) {
    $vars[] = \'licenseType\';
  return $vars;
 } 
并设置我的pre\\u get\\u 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
随my query\\u var一起捕获的随机字符串是什么?有没有一种方法可以在没有它的情况下检索query\\u var?当我使用$\\u GET[\'licenseType\']时,我看到了同样的情况。

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

这是患有% 元查询值中的字符。自4.8.3起% 正在转义字符(实际上由半随机字符串替换),应在执行sql查询之前取消转义。

您应该向插件作者咨询处理它的最佳方式,但在您的具体情况下,我想说,稍微重新设计您的代码将是比任何不可回避的代码更好的解决方案。LIKE 最好避免昂贵的操作,并且根据您的UI,您可以对值进行严格的比较。

相关推荐

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

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