已解决
回应@tomjnowell:Yep!你说得对,我没有提供足够的细节和背景,对不起。正如你所看到的,我不习惯在这里发问,英语也不是我的母语。所以谢谢你耐心地帮助我。
我想要的是通过几个post meta进行搜索,并且可以选择通过一个名为ref\\u bib的自定义post类型中的所有post meta加上post\\u标题进行搜索。
你可以在this site 关于the Borgia family (主要是加泰罗尼亚语)。
正如您所注意到的,最初有几种形式:第一种是执行一般搜索(在自定义post meta和post\\u title中),另外四种是其他选项(是的,您是对的:可以简化。我会的)。
实际上,多亏了user5200704,我在这里和那里做了一些研究,最终发现了一些对我来说非常有效的东西(虽然不是完全的、令人兴奋的幸福,我可能会在另一个问题中解释)。
如果有人感兴趣,我得到的是代码。
这是搜索表单(在代码的第一个版本中,每个帖子元都有一个表单,稍后我将使用下拉列表使其更性感):
<form method="get" id="searchform" class="searchform" action="http://www.elsborja.cat/cat_bib/general/">
<div class="cercadiv">
<input type="text" value="" name="s" id="s" />
<input type="hidden" name="search-type" value="autor" />
<input id="cercabib" class="eb_submit" name="submit" type="submit" value="Cerca" />
</div>
</form>
现在是“functions.php”中的代码:
add_filter(\'pre_get_posts\', \'filtra_inici\', 10, 2);
function filtra_inici( $query )
{
global $wp;
if ( ( is_archive() ) && $query->is_main_query() && !is_admin() ) {
if ( strpos( $wp->query_vars[\'category_name\'], \'revista-borja\' ) !== false ) {
$query->set( \'orderby\', \'date\');
$query->set( \'order\', \'ASC\' );
}
if (
$query->is_search
&& isset($_GET[\'search-type\'])
&& $_GET[\'search-type\'] == \'bibliografia\'
) {
$query->set( \'post_status\', \'publish\');
$query->set( \'post_type\', \'ref_bib\');
}
if (
$query->is_search
&& isset($_GET[\'search-type\'])
&& \'bibliografia\' !== $_GET[\'search-type\']
) {
$camp = $_GET[\'search-type\'];
if ($camp == \'general\') {
$custom_fields = array(\'autor\', \'publicacio\', \'edito\', \'observacions\');
}else {
$custom_fields = array( $camp);
}
$searchterm = $query->query_vars[\'s\'];
// we have to remove the "s" parameter from the query, because it will prevent the posts from being found
$query->query_vars[\'s\'] = "";
if ($searchterm != "") {
$meta_query = array(\'relation\' => \'OR\');
foreach ($custom_fields as $cf) {
array_push($meta_query, array(
\'key\' => $cf,
\'value\' => $searchterm,
\'compare\' => \'LIKE\'
));
}
$query->set("meta_query", $meta_query);
$query->set( \'post_type\', \'ref_bib\');
$query->set( \'post_status\', \'publish\');
};
}
}// end is_archive
}
此筛选器修改where子句以添加对post\\u标题的搜索,以防用户希望进行包含所有自定义元和post\\u标题的常规搜索。
add_filter( \'posts_where\', \'titol_posts_where\', 11, 2 );
function titol_posts_where( $where, &$wp_query )
{
global $wpdb;
global $wp;
if ($_GET[\'search-type\'] == \'general\') {
$where .= \' OR \' . $wpdb->posts . \'.post_title LIKE \\\'\' . esc_sql( $wpdb->esc_like( $_GET[\'s\'] ) ) . \'%\\\'\';
str_replace("LIKE", "", $where);
}
return $where;
}
希望这能对某人有所帮助,再次感谢@tomjnewell、@Joel和@user5200704