元关键字中的任意数字(wp查询)

时间:2015-02-06 作者:MIC

我有这样一个疑问。字段modules\\u%\\ u文本是高级自定义字段灵活字段,其中%应代表任何行号,它表明它应该像那样工作,但事实并非如此。我做错了什么?也许%不代表任何数字,或者?如果我输入的是modules\\u 0\\u文本,我得到的是正确的字段。

...

\'meta_query\' => array(
    \'relation\' => \'OR\',
array(
\'key\' => \'price\',
\'value\' => $_GET[\'searchword\'],
\'compare\' => \'LIKE\'
),
array(
\'key\' => \'modules_%_text\',
\'value\' => $_GET[\'searchword\'],
\'compare\' => \'LIKE\'
)

...

UPDATE:

Here is my args:

$args = array(
  \'post_type\'=> \'custompost\',
  \'meta_query\' => array(
  \'relation\' => \'AND\',
    array(\'key\' => \'modules_%_text\',\'value\' => $_GET[\'from\'],\'compare\' => \'LIKE\'),
    array(\'key\' => \'modules_%_images\',\'value\' => $_GET[\'to\'],\'compare\' => \'LIKE\')
   )    
);

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

您必须使用LIKEmeta_key 支持SQL% 图案这个compare 属性仅应用于元值。

相反,您可以尝试使用以下内容对其进行过滤:

/**
 * Match any numbers in given a meta-key for WP_Query
 *
 * @see https://wordpress.stackexchange.com/a/177331/26350
 */

! is_admin() && add_filter( \'posts_where\', function( $where )
{
    global $wpdb;

    // Replace the following meta key search:
    $find = $wpdb->postmeta . ".meta_key = \'modules_%_text\'";

    // with a LIKE search:
    //$to = $wpdb->postmeta . ".meta_key LIKE \'modules_%_text\'";

    // or a REGEXP search:
    $to   = $wpdb->postmeta . ".meta_key REGEXP \'^modules_[0-9]+_text$\'";

    // Replace:
    if( false !== stripos( $where, $find ) )    
        $where = str_ireplace( $find, $to, $where );

    return $where;
} );
这将从以下位置修改元键搜索:

wp_postmeta.meta_key = \'modules_%_text\'

wp_postmeta.meta_key  LIKE \'modules_%_text\'
或者,如果您必须只匹配元键中的数字:

wp_postmeta.meta_key  REGEXP \'^modules_[0-9]+_text$\'
PS:Here\'s 最近发布的另一个类似问题。

更新:

回答关于多次替换的评论:

/**
 * Match any numbers in given array of meta-keys for WP_Query
 *
 * @see https://wordpress.stackexchange.com/a/177331/26350
 */

! is_admin() && add_filter( \'posts_where\', function( $where )
{
    global $wpdb;

    // Replace the following meta keys:
    $a_find = [ 
        $wpdb->postmeta . ".meta_key = \'modules_%_text\'",
        $wpdb->postmeta . ".meta_key = \'modules_%_images\'"
    ];

    // with a LIKE search:
    //$a_to = [
    //    $wpdb->postmeta . ".meta_key LIKE \'modules_%_text\'",
    //    $wpdb->postmeta . ".meta_key LIKE \'modules_%_images\'"
    //];

    // or a REGEXP search:
    $a_to   = [
        $wpdb->postmeta . ".meta_key REGEXP \'^modules_[0-9]+_text$\'",
        $wpdb->postmeta . ".meta_key REGEXP \'^modules_[0-9]+_images$\'"
    ];

    // Replace:
    return str_ireplace( $a_find, $a_to, $where );

} );
在哪里$a_find$a_to 是大小相等的数组。

结束

相关推荐

Custom taxonomy template loop

我知道这个问题问得很多,但我找不到一个适合我的答案。我制作了一些自定义帖子类型和一些自定义分类法。我有自定义的帖子类型Products 并与分类法相联系Product Categories. 当用户在产品页面上单击产品类别时,我想向他显示该特定类别中的所有产品。问题是,产品类别将约为50种。现在我发现的唯一一件事就是把这个<?php $loop = new WP_Query( array( \'post_type\' => \'all_products\', \'posts_per_page\

元关键字中的任意数字(wp查询) - 小码农CODE - 行之有效找到问题解决它

元关键字中的任意数字(wp查询)

时间:2015-02-06 作者:MIC

我有这样一个疑问。字段modules\\u%\\ u文本是高级自定义字段灵活字段,其中%应代表任何行号,它表明它应该像那样工作,但事实并非如此。我做错了什么?也许%不代表任何数字,或者?如果我输入的是modules\\u 0\\u文本,我得到的是正确的字段。

...

\'meta_query\' => array(
    \'relation\' => \'OR\',
array(
\'key\' => \'price\',
\'value\' => $_GET[\'searchword\'],
\'compare\' => \'LIKE\'
),
array(
\'key\' => \'modules_%_text\',
\'value\' => $_GET[\'searchword\'],
\'compare\' => \'LIKE\'
)

...

UPDATE:

Here is my args:

$args = array(
  \'post_type\'=> \'custompost\',
  \'meta_query\' => array(
  \'relation\' => \'AND\',
    array(\'key\' => \'modules_%_text\',\'value\' => $_GET[\'from\'],\'compare\' => \'LIKE\'),
    array(\'key\' => \'modules_%_images\',\'value\' => $_GET[\'to\'],\'compare\' => \'LIKE\')
   )    
);

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

您必须使用LIKEmeta_key 支持SQL% 图案这个compare 属性仅应用于元值。

相反,您可以尝试使用以下内容对其进行过滤:

/**
 * Match any numbers in given a meta-key for WP_Query
 *
 * @see https://wordpress.stackexchange.com/a/177331/26350
 */

! is_admin() && add_filter( \'posts_where\', function( $where )
{
    global $wpdb;

    // Replace the following meta key search:
    $find = $wpdb->postmeta . ".meta_key = \'modules_%_text\'";

    // with a LIKE search:
    //$to = $wpdb->postmeta . ".meta_key LIKE \'modules_%_text\'";

    // or a REGEXP search:
    $to   = $wpdb->postmeta . ".meta_key REGEXP \'^modules_[0-9]+_text$\'";

    // Replace:
    if( false !== stripos( $where, $find ) )    
        $where = str_ireplace( $find, $to, $where );

    return $where;
} );
这将从以下位置修改元键搜索:

wp_postmeta.meta_key = \'modules_%_text\'

wp_postmeta.meta_key  LIKE \'modules_%_text\'
或者,如果您必须只匹配元键中的数字:

wp_postmeta.meta_key  REGEXP \'^modules_[0-9]+_text$\'
PS:Here\'s 最近发布的另一个类似问题。

更新:

回答关于多次替换的评论:

/**
 * Match any numbers in given array of meta-keys for WP_Query
 *
 * @see https://wordpress.stackexchange.com/a/177331/26350
 */

! is_admin() && add_filter( \'posts_where\', function( $where )
{
    global $wpdb;

    // Replace the following meta keys:
    $a_find = [ 
        $wpdb->postmeta . ".meta_key = \'modules_%_text\'",
        $wpdb->postmeta . ".meta_key = \'modules_%_images\'"
    ];

    // with a LIKE search:
    //$a_to = [
    //    $wpdb->postmeta . ".meta_key LIKE \'modules_%_text\'",
    //    $wpdb->postmeta . ".meta_key LIKE \'modules_%_images\'"
    //];

    // or a REGEXP search:
    $a_to   = [
        $wpdb->postmeta . ".meta_key REGEXP \'^modules_[0-9]+_text$\'",
        $wpdb->postmeta . ".meta_key REGEXP \'^modules_[0-9]+_images$\'"
    ];

    // Replace:
    return str_ireplace( $a_find, $a_to, $where );

} );
在哪里$a_find$a_to 是大小相等的数组。

相关推荐

Increase offset while looping

我正在编写一个自定义帖子插件,它将自定义帖子分组显示为选项卡。每组4个岗位。是否可以编写一个偏移量随每次循环而增加的查询?因此,结果将是:-第一个查询显示从1到4的帖子-第二个查询显示从5到8的帖子-第三个查询显示从9到12的帖子等。 <div class=\"official-matters-tabs\"> <?php $args = array(\'post_type\' => \'official-matters\', \'showp