我一直在努力寻找更好(自定义)搜索的最佳解决方案。我正在使用WordPress制作一个大型媒体目录,所以我的目的是提供更好的搜索选项。
到目前为止,我已经能够在档案中放置各种搜索表单。执行搜索的php:子类别、标记、自定义字段(autor)和年份,都在同一归档类别中。
我在这里发布这篇文章是为了看看是否有任何机构愿意改进或使用我迄今为止所做的工作。
我最讨厌的是每种类型的搜索都有不同的形式,我觉得它一点都不友好。也许有人可以帮我制定一个更好的解决方案。最后,我将把它与jQuery集成,看看它是否能变得更好,但首先我想清理我的代码,我想可能有更简单、更好的方法来标记我所做的事情。
忘记多个表单。。。。
使现代化
形式:
<?php
// Current URL for setting up Search Form Action
global $wp;
$current_url = get_home_url(null, $wp->request, null);
?>
<form role="search" method="get" action="<?php echo $current_url; ?>/">
<input type="hidden" name="s" value="true" />
<!-- General Search -->
<label for="s">General</label>
<input type="text" name="s" />
<!-- Tag Search -->
<label for="tag">Tag</label>
<input type="text" name="tag" />
<!-- Autor Search -->
<label for="autor">Autor</label>
<input type="text" name="autor" />
<input value="Buscar" type="submit">
</form>
功能
// Extend Search
function search_filter($query) {
if ( !is_admin() && $query->is_main_query() ) {
if ($query->is_search) {
$query->set( \'tag\', $query->query_vars[\'s\'] );
$query->set( \'meta_key\' , \'autor\' );
$query->set( \'meta_value\' , $query->query_vars[\'s\'] );
} } }
add_action(\'pre_get_posts\',\'search_filter\');
最合适的回答,由SO网友:ameraz 整理而成
以防它对任何人都很方便。
我的目标是引入增强/更好的搜索,为标记和自定义字段搜索提供其他字段。
将以下表单插入存档中。php,$categoria_id
作为当前存档类别:
<form class="group" role="search" method="get" action="<?php echo site_url(); ?>/">
<input type="hidden" name="cat" value="<?php echo $categoria_id; ?>" />
<!-- General Search -->
<input type="text" value="General" name="s" onfocus="if (this.value == \'General\') {this.value = \'\';}" onblur="if (this.value == \'\') {this.value = \'General\';}" />
<!-- Tag Search -->
<input type="text" value="Etiqueta" name="tags" onfocus="if (this.value == \'Etiqueta\') {this.value = \'\';}" onblur="if (this.value == \'\') {this.value = \'Etiqueta\';}" />
<!-- Autor Search -->
<input type="text" value="Autor" name="autor" onfocus="if (this.value == \'Autor\') {this.value = \'\';}" onblur="if (this.value == \'\') {this.value = \'Autor\';}" />
<input value="Buscar" type="submit">
</form>
在函数中。php我按照@s\\u ha\\u dum的建议插入了以下函数
// Extend Search
function search_filter($query) {
if ( !is_admin() && $query->is_main_query() ) {
if ( $query->is_search ) {
$tags = $_GET[\'tags\'];
if ( isset( $_GET[\'tags\'] ) && $_GET[\'tags\'] == \'Etiqueta\' ) {
$tags = NULL;
} elseif ( $tags != NULL ) {
$query->set( \'tag\', $tags );
}
$autor = $_GET[\'autor\'];
if ( isset( $_GET[\'autor\'] ) && $_GET[\'autor\'] == \'Autor\' ) {
$autor = NULL;
} elseif ( $autor != NULL ) {
$metaQuery = array( array( \'key\' => \'autor\', \'value\' => $autor, \'compare\' => \'LIKE\' ) );
$query->set( \'meta_query\' , $metaQuery );
}
} } }
add_action(\'pre_get_posts\',\'search_filter\');
SO网友:s_ha_dum
您只需要一个表单和上的回调pre_get_posts
. 例如:
<form role="search" method="get" id="searchform" action="<?php echo $current_url; ?>">
<input type="hidden" name="s" value="true" />
<!-- Tag Search -->
<label for="tags">Search Tag:</label>
<input type="text" value="Search" name="tags" id="tagsearchbox" />
<!-- Custom Field "autor" Search -->
<label for="autors">Search in Custom Field \'autor\':</label>
<input type="text" value="Search" name="autors" id="autorsearchbox" />
<input id="searchsubmit" value="Search" type="submit">
</form>
现在回拨:
function alter_search_ppp_wpse_107154($qry) {
if ($qry_>is_main_query() && $qry->is_search()) {
// parse your fields here and alter the query with $qry->set like this :
$qry->set(\'post_per_page\',10);
}
}
add_action(\'pre_get_posts\',\'alter_search_ppp_wpse_107154\');
您应该验证该代码。你有奇怪的事情发生,比如
id
属性,并将该Javascript放入文件并将其排队。