Php 对wp_查询中的meta_值进行排序,但删除排序前的特殊字符

Php 对wp_查询中的meta_值进行排序,但删除排序前的特殊字符,php,mysql,wordpress,Php,Mysql,Wordpress,我有一个插件,可以对搜索页面和分类页面上的帖子进行排序。循环已经考虑了缩小结果的范围,所以我需要的是能够将帖子排序为自定义的元值。在这种情况下,价格。我希望能够进入现有的查询,替换任何特殊字符,然后根据干净的元值进行排序 我使用了这个select,但问题是它查询数据库中的所有帖子,而不是wp_查询中的reults,这会大大降低排序速度 function join_it( $join ) { global $wpdb; $sym = get_option('sort_by_ignore')

我有一个插件,可以对搜索页面和分类页面上的帖子进行排序。循环已经考虑了缩小结果的范围,所以我需要的是能够将帖子排序为自定义的元值。在这种情况下,价格。我希望能够进入现有的查询,替换任何特殊字符,然后根据干净的元值进行排序

我使用了这个select,但问题是它查询数据库中的所有帖子,而不是wp_查询中的reults,这会大大降低排序速度

function join_it( $join ) {
global $wpdb;
    $sym = get_option('sort_by_ignore');
    $join .= "LEFT JOIN (SELECT $wpdb->prefix" . "postmeta.post_id AS ID, CAST(REPLACE(REPLACE(REPLACE($wpdb->prefix" . "postmeta.meta_value, ',', ''), '" . $sym . "',''),' ','') AS SIGNED) AS price FROM $wpdb->prefix" . "postmeta WHERE meta_key = 'my_price'" . ") P ON (P.ID = wp_posts.ID)";

return $join;
}
add_filter('posts_join', 'join_it' );

$args = array_merge( $wp_query->query, array('caller_get_posts' => 1,'paged' => $paged ));

        query_posts($args);

如果您只是使用它进行排序,那么最好使用
posts\u orderby
过滤器,而不是
posts\u join

如果您发现筛选器影响其他查询,则可以在需要时使用
remove\u filter


我的答案有点类似(没有用
replace
函数清理值-我想你必须把它留在里面)。

太棒了,这不完全是我的答案,但这让我走上了正确的方向!你太棒了!