Php Wordpress:get_posts过滤器

Php Wordpress:get_posts过滤器,php,wordpress,search,custom-fields,Php,Wordpress,Search,Custom Fields,我试图在我的帖子中创建一些带有自定义字段的过滤器。 因此,在我的searchpage.php中,我添加了以下内容: $args = array( 'post_type' => 'cp_course', 'numberposts' =>-1,'orderby' => 'ID', 'order' => 'ASC', 's' => $searchterm, 'meta_query' => array( 'relation' =>

我试图在我的帖子中创建一些带有自定义字段的过滤器。 因此,在我的
searchpage.php
中,我添加了以下内容:

$args = array(
    'post_type'  => 'cp_course', 'numberposts' =>-1,'orderby' => 'ID', 'order' => 'ASC', 's' => $searchterm,
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key'   => 'course_code',
            'value' => $code,
        ),
        array(
            'key' => 'course_duration',
            'value' => $duration,
        )
    )
);

$course = get_posts($args);
但是如果我只提供
$code
或只提供
$duration
,它将不起作用,由于
的关系,我必须同时提供它们。是否有比多个
IFs
更简单的方法来检查例如
$code
是否未提供,然后仅按
$duration
过滤帖子

编辑

通过使用,我使用了以下代码:

$args = array(
    'post_type'  => 'cp_course', 'numberposts' =>-1,'orderby' => 'ID', 'order' => 'ASC', 's' => $searchterm,
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'relation' => 'AND',
            array(
                'key'   => 'course_code',
                'value' => $code,
            ),
            array(
                'key' => 'course_duration',
                'value' => $duration,
            ),          
        ),
        array(
        'key'   => 'course_duration',
        'value' => $duration,
        ),
        array(
        'key'   => 'course_code',
        'value' => $code,
        )
    )
);
但是,如果我想扩展它以添加更多的搜索词,我会在数据库中得到许多
内部连接
查询,这会给服务器带来问题。以下是我尝试过的导致问题的方法:

$args = array(
    'post_type'  => 'cp_course', 'numberposts' =>-1,'orderby' => 'ID', 'order' => 'ASC', 's' => $searchterm,
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'relation' => 'AND',
            array(
                'key'   => 'course_code',
                'value' => $code,
            ),
            array(
                'key' => 'course_duration',
                'value' => $duration,
            ),  
            array(
                'key'   => 'course_iteration_start',
                'value' => $date_from,
            ),
            array(
                'key' => 'course_iteration_end',
                'value' => $date_to,
            ),  
        ),
        array(
        'key'   => 'course_duration',
        'value' => $duration,
        ),
        array(
        'key'   => 'course_code',
        'value' => $code,
        )
    )
);

其中,
course\u iteration\u start
course\u iteration\u end
course\u iteration
自定义字段的
子字段
(中继器)

您可以使用嵌套关系:

'meta_query' => array(
    'relation' => 'OR',
    array(
        'relation' => 'AND',
        array(
            'key'   => 'course_code',
            'value' => $code,
        ),
        array(
            'key' => 'course_duration',
            'value' => $duration,
        )
    ), 
    array(
        'key'   => 'course_duration',
        'value' => $duration,
    )
)

如果您有许多密钥,那么是的,这将很慢,您将需要使用If/else解决方案,或者减少密钥,然后在从数据库获取后进行过滤。您能否提供一个从数据库获取后进行过滤的示例?谢谢