微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当元值保存为序列化键/值时如何使用WordPress元查询

如何解决当元值保存为序列化键/值时如何使用WordPress元查询

我正在处理 wordpress 项目,这需要我操作现有插件WP_Query

在前端方面,我有 3 个 Dropdown ,其中 2 个我使用 tax_query 自定义并使用插件filter ,我不知道如何使用 Meta_query 自定义(查看屏幕截图)

enter image description here

<?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 数组中(检查屏幕截图)

enter image description here

我应该在这里写什么来比较 'value' => '', ??

解决方法

您将不得不在值周围使用 LIKE 运算符 和 %...% (实际上,使用 WP_Query 您不需要自己插入它,运算符设置为 {{1 }},WP 会自动将 LIKE 放在值本身周围),以找到部分匹配。至于匹配什么 - 仅 %…%%free% 可能不是一个好主意,因为如果该序列化数组中的任何其他属性可能包含 {{1}

因此,您可能也应该在此处包含密钥 - 但随后您还必须包含其间的部分,这意味着 %"free"% 部分也需要动态化。数字需要是多少,可以很容易地通过 free

确定

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。