如何使用WP_QUERY获取一系列带有数字和字母的自定义字段的帖子?

时间:2013-10-31 作者:hitautodestruct

我正在使用WP_Query() 要根据帖子的范围获取帖子,例如:

$args = array(
    \'numberposts\' => -1,
    \'post_type\' => \'page\',
    \'posts_per_page\' => -1, 
    \'meta_query\' => array(
        \'relation\' => \'AND\',
        array(
            \'key\' => \'parameters\',
            \'value\' => \'width\',
        ),
        array(
            \'key\' => \'value\',
            \'value\' => array( \'22mm\', \'55mm\' ), // Can this be done when I\'m using NUMERIC and BETWEEN?
            \'type\' => \'NUMERIC\',
            \'compare\' => \'BETWEEN\'
        )
    )
);

$the_query = new WP_Query( $args );
数据库中,我的值存储为字符串,即。22mm, 55mm

问题

如何告诉查询搜索范围并忽略mm 在里面22mm?

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

在上截取查询posts_where 滤器您可以在其中替换非数值:

preg_replace( "/[^0-9,.]/", "", $yourMeta );
或在(通用)代码段中:

add_action( \'posts_where\', \'wpse120784WhereDiameter\', 100 );
function wpse120784WhereDiameter( $where )
{
    // If conditions here - only target the cases where we need it
    # if ( foo ) { etc.

    // Only run once for this single query
    remove_filter( current_filter(), __FUNCTION__ );

    $diameter = get_post_meta( ... );
    $where .= preg_replace( "/[^0-9,.]/", $diameter, $where );

    return $where;
}
当您设法确定要搜索的确切MM直径时,Regex搜索/替换调用将简单地弹出MM/Inch (无论有什么单位)。

当然,您需要以某种方式访问post meta(get_post_meta()) 在Regex替换任务中更准确地定位它们的值,但它应该可以帮助您实现目标。

不过,我认为从你的条目中删除MM会比你想要实现的更容易、更好。

结束