wordpress开发:WP_Query 通过 meta_query 查询和排序文章

2019-10-1308:28:28网站建设与开发Comments2,520 views字数 4441阅读模式

众所周知,所有文章都有元数据( metadata ),您可以在“自定义字段”元框中填充元数据(顺便说一下,该元框可以隐藏)。因此,例如,如果您想获得一个包含meta键show_on_homepage和meta值的帖子on,可以通过以下方式进行操作:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16845.html

$rd_args = array(
	'meta_key' => 'show_on_homepage',
	'meta_value' => 'on'
);
 
$rd_query = new WP_Query( $rd_args );

或者,如果您需要查询除带有此对元键和值的所有文章外的其他文章,可以使用以下参数:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16845.html

$rd_args = array(
	'meta_key' => 'show_on_homepage',
	'meta_value' => 'on',
	'meta_compare' => '!='
);
 
$rd_query = new WP_Query( $rd_args );

需要注意的是,本文中的所有示例都经过简化,因此缺少一些WP_Query参数,例如posts_per_pagepost_type文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16845.html

如果您对其他meta_compare参数值比较感兴趣,请查看下面的 “ compare”参数说明,因为它们都接受相同的值。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16845.html

这是一个非常简单的示例,只是作为介绍。但是这篇文章是关于meta_query参数的。这个参数允许我们创建一个非常酷的文章过滤器和搜索脚本。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16845.html

通过一个Meta值获取文章

下面的示例使您可以获取具有特定自定义字段值的所有文章。让我们获取所有具有自定义字段名称“ color”和自定义字段值white 的文章。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16845.html

// the meta_key 'color' with the meta_value 'white'
$rd_args = array(
	'meta_query' => array(
		array(
			'key' => 'color',
			'value' => 'white'
		)
	)
);
 
$rd_query = new WP_Query( $rd_args );

如果您在与查询匹配的任何文章中查看文章的编辑页面(在后台中),您将在“自定义字段”部分中看到以下内容:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16845.html

wordpress开发:WP_Query 通过 meta_query 查询和排序文章
自定义字段

让我们做相反的事情–获取除带有meta键“ color”和meta 值white 以外的所有文章 :文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16845.html

$rd_args = array(
	'meta_query' => array(
		array(
			'key' => 'color',
			'value' => 'white',
			'compare' => '!='
		)
	)
);
 
$rd_query = new WP_Query( $rd_args );

通过多个Meta值获取文章

现在,让我们获取所有自定义字段“color”包含whitegreen字段值的文章:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16845.html

// 自定义字段名为 color ,值为 'white' 或 'green'
$rd_args = array(
	'meta_query' => array(
		array(
			'key' => 'color',
			'value' => array('white','green'),
			'compare' => 'IN'
		)
	)
);
 
$rd_query = new WP_Query( $rd_args );

获取除白色产品和绿色产品以外的所有产品(例如,在线商店中的产品):文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16845.html

$rd_args = array(
	'meta_query' => array(
		array(
			'key' => 'color',
			'value' => array('white','green'),
			'compare' => 'NOT IN'
		)
	)
);
 
$rd_query = new WP_Query( $rd_args );

如何使用meta_query中的 compare

正如您本文的示例中看到的那样,每个示例中都有一个 compare 参数。现在,我想展示它可以接受的值以及它们的含义。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16845.html

  • = 等于(默认)
  • != 不等于
  • < 小于
  • <= 小于或等于
  • > 大于
  • >= 大于或等于,例如
// 此示例中的产品价格为2000或2000以上:
$args = array(
	'meta_query' => array(
		array(
			'key' => 'price',
			'value' => 2000,
			'type' => 'numeric', //将其指定为数值
			'compare' => '>='
		)
	)
);
  • LIKE-允许在meta值来搜索特定字符串,在查询下面的示例中,我们查询“first_name”字段中,包含有John( 也可以是JohnnyJohnathansomethingJohnsomething )的所有文章:
$args = array(
	'meta_query' => array(
		array(
			'key' => 'first_name',
			'value' => 'John',
			'compare' => 'LIKE'
		)
	)
);

还有,它不区分大小写,也不需要通配符 文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16845.html

  • NOT LIKE–类似于LIKE相反的工作方式–meta值不能包含给定的字符串。
  • IN– 文章meta值必须包含给定数组的值之一,您可以参见【通过多个Meta值获取文章】的示例
  • NOT IN –meta值不能包含给定数组中的任何值。
  • BETWEEN –文章meta值应在给定的值范围之间,例如:
//产品价格超过2000和小于4000 
$args = array(
	'meta_query' => array(
		array(
			'key' => 'price',
			'value' => array( 2000, 4000 ),
			'type' => 'numeric',
			'compare' => 'BETWEEN'
		)
	)
);

它也可以用于日期,也可以查看下面的示例。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16845.html

  • NOT BETWEEN –不在给定范围内。
  • EXISTS (WordPress> = 3.5)–如果特定meta键的meta值存在或为空/ null。
$args = array(
	'meta_query' => array(
		array(
			'key' => 'misha_key',
			'compare' => 'EXISTS'
		)
	)
);

实际上它会检查是否存在meta键,您甚至不必通过此参数传递任何值。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16845.html

  • NOT EXISTS (WordPress> = 3.5)–如果给定的meta键根本不存在
  • REGEXP (WordPress> = 3.7)–它允许您将meta值与正则表达式进行比较,例如:
$args = array(
	'meta_query' => array(
		array(
			'key' => 'misha_key',
			'value' => '^[0-9]*$', // "misha_key" 必须只是数字
			'compare' => 'REGEXP'
		)
	)
);
  • NOT REGEXP(WordPress> = 3.7)–与REGEXP 相似,但元值必须不匹配给定的正则表达式
  • RLIKE (WordPress> = 3.7)–它是 REGEXP 的同义词

在日期中使用 "compare => between"

您还可以meta_query用来检查自定义字段是否在两个日期之间。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16845.html

您必须牢记的最重要的一点是,日期格式应为YYYY-MM-DDYYYY/MM/DD或类似的格式(如果需要,年份会排在第一位,然后是月份,然后是日期,然后是时间)。检查它在数据库中的存储方式–如果以其他格式存储,例如首先使用“天”,那么在您更改数据库中的日期之前,过滤对您不起作用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16845.html

array(
	'key' => 'sale_day',
	'value' => array( '2018-01-01', '2018-01-09' ),
	'compare' => 'BETWEEN'
)

如果日期以UNIX时间存储,例如:1543391233,那么一切将变得非常简单:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16845.html

array(
	'key' => 'sale_day',
	'value' => array( strtotime('2018-01-01'), strtotime('2018-01-09') ),
	'type' => 'numeric',
	'compare' => 'BETWEEN'
)

通过多对meta字段查询文章

现在,我将向您展示如何通过几个(两个或多个)自定义字段值来组合文章。首先,让我为您介绍relation可以接受两个值的参数-  ORAND(默认值)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16845.html

// 'color'是'white'并且'price'大于2000且小于4000 
$rd_query = new WP_Query( array(
	'meta_query' => array(
		'relation' => 'AND', // 以下条件两者都必须匹配
		array(
			'key' => 'show_on_homepage',
			'value' => 'on'
		),
		array(
			'relation' => 'OR', // 仅'color'或'price'必须匹配
			array(
				'key' => 'color',
				'value' => 'white'
			),
			array(
				'key' => 'price',
				'value' => array( 2000, 4000 ),
				'type' => 'numeric',
				'compare' => 'BETWEEN'
			)
		)
	)
) );

如您所见,在上面的meta_query查询中,我们使用了多个 relation文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16845.html

根据meta值排序文章("orderby" 和 "order"参数 )

我将向您展示如何通过meta值对文章进行排序的不同示例。首先,看一下这个简单的代码示例,其中我们甚至不使用 meta_query :文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16845.html

$args = array(
	'meta_key' => 'misha_key',
	'orderby' => 'meta_value'
);

现在,假设misha_key只包含数字值,我们可以针对这种情况稍微更改一下代码。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16845.html

$args = array(
	'meta_key' => 'misha_key',
	'orderby' => 'meta_value_num'
);

但是如何与 meta_query 一起使用呢?简单,只需按以下方式更改我们的代码即可:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16845.html

$args = array(
	'meta_query' => array(
		'misha_clause' => array(
			'key' => 'misha_key',
			'compare' => 'EXIST'
		)
	),
	'orderby' => 'misha_clause'
);

根据多个meta值排序文章

从 WordPress 4.2 开始,就允许通过多个meta值排序文章文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16845.html

$args = array(
	'meta_query' => array(
		'relation' => 'AND',
		'price_clause' => array(
			'key' => 'price',
			'value' => array( 2000, 4000 ),
			'type' => 'numeric',
			'compare' => 'BETWEEN'
		),
		'misha_clause' => array(
			'key' => 'misha_key',
			'compare' => 'EXISTS'
		), 
	),
	'orderby' => array(
		'price_clause' => 'ASC',
		'misha_clause' => 'DESC'
	),
);

上面示例中,我们通过price_clause升序对文章进行排序,然后通过misha_clause降序对文章进行排序。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/cms/16845.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/cms/16845.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定