按子类别、标签、自定义域和年份在归档页面中搜索

时间:2013-07-19 作者:ameraz

我一直在努力寻找更好(自定义)搜索的最佳解决方案。我正在使用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\');

2 个回复
最合适的回答,由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放入文件并将其排队。

结束

相关推荐

Delete Term via edit-tags.php

我可能会对此表示不满,但编辑标签上是否有“删除”链接。php页面?注意:不是WP列表,而是实际页面,您可以在其中单独查看术语。似乎他们在这里添加了选项:https://core.trac.wordpress.org/ticket/9777#no1_更新看起来我看错了WP文件。单个术语页面位于:wp admin/edit tag form。php,并且没有提到任何“删除”。知道了这一点,是否可以在此页面上添加一个删除按钮,或在WP列表中创建一个“删除”列。我这样尝试过,但收到了列的“未定义变量‘tag’”。