meta_value 保存为序列化 key/value 时如何使用 WordPress 元查询

How to use WordPress metaquery when meta_value is saved as serialized key/value

我正在从事 WordPress 项目,这需要我操作现有插件的 WP_Query

在前端,我有 3 个下拉列表,其中 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'],
            'field'    => 'term_id',
            '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 你不需要自己插入,将运算符设置为 LIKE,WP 将自动将 %…% 放在值本身周围),以找到部分匹配。至于要匹配什么 - 只是 %free%%"free"% 可能不是一个好主意,因为如果序列化数组中的任何其他属性可能包含 [=14=,那么你会得到误报] 还有。

所以您可能也应该在此处包含密钥 - 但是您还必须包含中间部分,这意味着 s:4 部分也需要动态化。需要的数字可以很容易地由 strlen($_GET['priceid'])

确定