sta
  • 0
Новичок

Параметры/фильтры поиска

  • 0

Я пытаюсь добавить некоторые параметры флажка в поле поиска на боковой панели, подобное этому, где у пользователя есть возможность выбрать, следует ли искать All Words, Some Word или Entire phrase .

Я нашел это после некоторых поисков — WordPress Search Phrases. Опция «предложение», кажется, работает хорошо, но другие не так хороши.

Код ниже — это то, над чем я работаю в данный момент, но был бы очень признателен за помощь, чтобы это работало правильно. Заранее большое спасибо, С. (Я не хочу использовать для этого плагины).

<form action="<?php bloginfo('home'); ?>/" method="post">
<div class="search-icon">       
     <label for="search" accesskey="4" class="hidden">Search the site</label>                  
     <input type="text" name="s" id="search" value="Enter search term" onblur="this.value = this.value || this.defaultValue;" onfocus="this.value = '';" />             
     <input type="submit" name="submit" value="GO" class="s-btn" />
     <p><a href="#" id="search-anchor">Search Options</a></p>
     <div class="option-slide">
     <input type="radio" name="sentence" value="" checked="checked" /><label>All Words</label><br />
     <input type="radio" name="sentence" value="or" /><label>Some Word</label><br />
     <input type="radio" name="sentence" value="and" /><label>Entire phrase</label>    
     </div>   
 </div></form>    

РЕДАКТИРОВАТЬ: приведенный ниже ответ на самом деле не работает: (У кого-нибудь еще есть идеи, пожалуйста?

Share
  1. Прежде всего: атрибут имени для флажка «Все слова» не должен быть «s». Это заменяет текст поиска на «1», поэтому, когда он отмечен, вы ищете «1», а не текст поиска.

    Я не думаю, что вы хотите использовать «точный», если хотите воспроизвести пример, который вы привели в своем вопросе.

    Вот пример:

    Search for "Two Things" in titles and content:
    
    Matches                   Does not match
    
    "Two"                     "Two Things More"
    "Things"                  "One or Two Things"
    "Two Things"              "Two Things."
    

    Я мог бы продолжать и говорить о том, что это не будет соответствовать, но вы поняли идею. Вероятно, поэтому вы получаете неожиданные результаты.

    В любом случае, попробуйте изменить имя флажка «все слова» на что-то, что не будет соответствовать, например 'fake_search_flag_name', поскольку этот флаг в любом случае просто описывает обычные возможности поиска WordPress по умолчанию.

    РЕДАКТИРОВАТЬ

    Хорошо, теперь, когда это радио, вот что вы можете сделать:

    Первый — это поведение WordPress по умолчанию, поэтому вам нужно сделать ЗНАЧЕНИЕ пустым:

    <input type="radio" name="sentence" value="" checked="checked" /> All Words
    

    Если этот флажок установлен, поскольку значение пусто, WordPress проигнорирует его и будет использовать функциональность по умолчанию. Следующая часть немного сложнее. Измените значения двух других радиостанций примерно так:

    <input type="radio" name="sentence" value="or" /> Some Word<br />
    <input type="radio" name="sentence" value="and" /> Entire phrase
    

    Само по себе это заставит их обоих вести себя одинаково: так, как вы хотите, чтобы «Вся фраза» работала. Итак, нам нужно, чтобы «Some Word» заработал. Я вообще не тестировал эту следующую часть, но она должна работать.

    Нам нужно отфильтровать поисковый запрос, чтобы условия поиска соответствовали сообщениям, в которых есть некоторые слова, но не все из них:

    add_filter( 'posts_search', 'my_awesome_posts_search_filter' );
    
    function my_awesome_posts_search_filter( $sql, $wpq ){
      if( !isset( $wpq->query_vars['sentence'] ) || 'or' != $wpq->query_vars['sentence'] )
        return $sql;
      $new_search = str_replace( ') AND (', ') OR (', $sql );
      return $new_search;
    }
    

    Это должно сработать.

    • 0

Оставить ответ

You must login to add an answer.