如何解决当元值保存为序列化键/值时如何使用WordPress元查询
我正在处理 wordpress 项目,这需要我操作现有插件的 WP_Query
在前端方面,我有 3 个 Dropdown ,其中 2 个我使用 tax_query 自定义并使用插件的 filter ,我不知道如何使用 Meta_query 自定义(查看屏幕截图)
<?PHP
add_filter( 'learndash_ld_course_list_query_args','filter__learndash_ld_course_list_query_args',10,2 );
function filter__learndash_ld_course_list_query_args( $filter,$atts ) {
if ( ! isset( $filter['tax_query'] ) ) {
$filter['tax_query'] = array();
}
if ( ! isset( $filter['Meta_query'] ) ) {
$filter['Meta_query'] = array();
}
if ( isset( $_GET['catid'] ) && ! empty( $_GET['catid'] ) ) {
$filter['tax_query'][] = array(
'taxonomy' => 'ld_course_category','field' => 'term_id','terms' => intval( $_GET['catid'] ),);
}
if ( isset( $_GET['taxid'] ) && ! empty( $_GET['taxid'] ) ) {
$filter['tax_query'][] = array(
'taxonomy' => $atts['course_taxonomy'],'terms' => intval( $_GET['taxid'] ),);
}
if ( isset( $_GET['priceid'] ) && ! empty( $_GET['priceid'] ) ) {
$filter['Meta_query'][] = array(
'key' => '_sfwd-courses','value' => '','compare' => 'LIKE',);
}
if ( count( $filter['tax_query'] ) > 1 ) {
$filter['tax_query']['relation'] = 'AND';
}
//echo "<pre>"; print_r($filter);
return $filter;
}
但我被困在 Meta_query 中,因为它将数据存储在 serialize 数组中(检查屏幕截图)
我应该在这里写什么来比较 'value' => '',
??
解决方法
您将不得不在值周围使用 LIKE 运算符 和 %...% (实际上,使用 WP_Query 您不需要自己插入它,运算符设置为 {{1 }},WP 会自动将 LIKE
放在值本身周围),以找到部分匹配。至于匹配什么 - 仅 %…%
或 %free%
可能不是一个好主意,因为如果该序列化数组中的任何其他属性可能包含 {{1}
因此,您可能也应该在此处包含密钥 - 但随后您还必须包含其间的部分,这意味着 %"free"%
部分也需要动态化。数字需要是多少,可以很容易地通过 free
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。