0

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

在前端,我有 3 个下拉菜单,其中 2 个我使用tax_query自定义并使用插件的过滤器,我不知道如何使用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中,因为它将数据存储在序列化数组中(检查屏幕截图)

在此处输入图像描述

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

4

1 回答 1

1

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

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

于 2021-06-30T13:33:46.267 回答