网址导航网首页

嗨,欢迎来到25Qi网址导航

站长QQ:2598903095

WordPress

WordPress 自定义 WP_Query 循环如何支持 tax_query or meta_query 参数

时间:2021-08-30 丨 作者:WordPress教程 丨 关键词:WordPress

WordPress 的循环函数都是 and 方式链接,对于单个的 meta_query 或者 tax_query 字段内部才能使用 or,那么如果我们想要实现 tax_query or meta_query 的关系,WordPress 默认是不提供支持的。

WordPress WP_Query 自定义

子凡最近为了满足泪雪网的功能需求,查找了大量的教程,甚至想过用两个 WP_Query 循环来实现这样的功能,后来通过 Google 搜索到一个相关的答案,为此子凡整理并分享出来,这样当你在使用 WordPress 的 WP_Query 来自定义循环,并且完美的支持 tax_query or meta_query。

1234567891011121314151617181920212223
/** * Modify WP_Query to support 'meta_or_tax' argument * to use OR between meta- and taxonomy query parts. * use '_meta_or_tax' => true in wp_query array */add_filter( 'posts_where', function( $where, \WP_Query $q ){$tax_args = isset( $q->query_vars['tax_query'] ) ? $q->query_vars['tax_query'] : null;$meta_args = isset( $q->query_vars['meta_query'] ) ? $q->query_vars['meta_query'] : null;$meta_or_tax = isset( $q->query_vars['_meta_or_tax'] ) ? wp_validate_boolean( $q->query_vars['_meta_or_tax'] ) : false;// Construct the "tax OR meta" queryif( $meta_or_tax && is_array( $tax_args ) &&  is_array( $meta_args )  )   {global $wpdb;$field = 'ID';// Primary id column$sql_tax = get_tax_sql(  $tax_args,  $wpdb->posts, $field );// Tax query$sql_meta = get_meta_sql( $meta_args, 'post', $wpdb->posts, $field );// Meta query// Modify the 'where' partif( isset( $sql_meta['where'] ) && isset( $sql_tax['where'] ) ) {$where = str_replace( [ $sql_meta['where'], $sql_tax['where'] ], '', $where );$where .= sprintf( ' AND ( %s OR  %s ) ', substr( trim( $sql_meta['where'] ), 4 ), substr( trim( $sql_tax['where']  ), 4 ) );}}return $where;}, PHP_INT_MAX, 2 );

使用方式则是在 WP_Query 的参数数组里面添加一条'_meta_or_tax' => true,简单的举个例子:

1234567891011121314151617181920212223
$args = array('post_status'=> 'publish','order'=> 'ASC','nopaging'=> true,'_meta_or_tax'=> true, //用于支持 tax_query OR meta_query 查询'tax_query'=> array('relation'=> 'OR',array('taxonomy'=> 'category','field'=> 'id','terms'=> array(1,2,3),'operator'=> 'IN'), ),'meta_query'=> array(array('key'=> 'Headline','value'=> '''compare'=> '!='),));$query = new WP_Query( $args );

这可能是一个非常小众的需求,但是用起来还是非常的爽,而且对于有相关功能需求的来说,以及用两次循环甚至三次循环来搞定简直不要不要的,子凡我要的就是最极简最极致的功能,也要最简单高效的代码。

 

在线随机小姐姐图片换一批
最新收录
  • 体育赛事分析报道

    让足球滚一会提供足球、篮球、NBA赛事前瞻分析推荐,与各联赛时实新闻报道、球员转会消息、赛事录像回放等资讯,用心认真把每件事做到最好的网站。

  • 足球比分直播

    体育即时比分网提供实时足球比分与篮球比分数据,包括即时比分、赛程、球队、竞猜等数据,让您无时无刻都能掌握时实足球比分与篮球比分动态消息。即时更新各项比赛数据与完赛结果。让足球滚一会带您体验精彩的竞猜足球比赛!

  • 金魔网

    金魔网

  • 外籍模特

    外籍模特

  • imtoken钱包

    :imtoken钱包为您提供最新的imtoken钱包信息,imtoken是全球最大的数字货币钱包,支持包括BTC, ETH, BSC, TRON, Aptos, Polygon, Solana, OKExChain, Polkadot, Kusama, EOS等在内的所有主流公链及Layer 2,已为全球近千万用户提供可信赖的数字货币资产管理服务,也是当前DeFi用户必备的工具钱包。

  • 明星经纪公司

    我们专注提供明星代言、商演、翻包视频、祝福视频录制等业务,十多年行业服务经验