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解决方案,或者减少密钥,然后在从数据库获取后进行过滤。您能否提供一个从数据库获取后进行过滤的示例?谢谢