WordPress:get_posts 过滤器
Wordpress: get_posts filter
我正在尝试在我的帖子中使用自定义字段创建一些过滤器。
所以在我的 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
,那是行不通的,由于AND
关系,我必须同时提供它们。是否有比多个 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,
)
)
);
但如果我想扩展它以添加更多搜索词,我会在数据库中遇到许多 INNER JOIN
查询,这会导致服务器出现问题。这是我尝试过的导致问题的方法:
$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_iteration_start
和 course_iteration_end
是 course_iteration
custom field
的 sub fields
(中继器)。
您可以使用嵌套关系:
'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,
)
)
我正在尝试在我的帖子中使用自定义字段创建一些过滤器。
所以在我的 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
,那是行不通的,由于AND
关系,我必须同时提供它们。是否有比多个 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,
)
)
);
但如果我想扩展它以添加更多搜索词,我会在数据库中遇到许多 INNER JOIN
查询,这会导致服务器出现问题。这是我尝试过的导致问题的方法:
$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_iteration_start
和 course_iteration_end
是 course_iteration
custom field
的 sub fields
(中继器)。
您可以使用嵌套关系:
'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,
)
)