WordPress / PHP: добавить строку поиска в существующую строку запроса - PullRequest
0 голосов
/ 27 декабря 2011

В теме WordPress я настроил несколько поисковых фильтров на основе пользовательских таксономий, которые будут запрашивать посты, используя структуру URL, такую ​​как:

http://myblog.com/?taxonomy1=term1+term2&taxonomy2=term3+term4

В дополнение к этим фильтрам я хочу интегрировать текстовый поиск, но не знаю, как добавить поисковый запрос (например, ?s=mysearchhere) в существующий запрос таксономии. Итак, в общем, я хочу, чтобы форма при отправке приводила к URL, который объединяет две строки:

"http://myblog.com/?taxonomy1=term1+term2&taxonomy2=term3+term4&s=mysearchhere"

До сих пор я пытался создать форму поиска со следующими функциями:

 function remove_querystring_var($url, $key) { 
        $url = preg_replace('/(.*)(?|&)' . $key . '=[^&]+?(&)(.*)/i', '$1$2$4', $url . '&'); 
        $url = substr($url, 0, -1); 
        return $url; 
    }

function apl_search_form($echo = true) {
    do_action( 'get_search_form' );

    $search_form_template = locate_template('searchform.php');
    if ( '' != $search_form_template ) {
        require($search_form_template);
        return;
    }

    $url = $_SERVER["REQUEST_URI"]; 
    $action = remove_querystring_var($url,'s');


    $form = '<form role="search" method="get" id="searchform" action="' . $action . '" >
    <div><label class="screen-reader-text" for="s">' . __('Search for:') . '</label>
    <input type="text" value="' . get_search_query() . '" name="s" id="s" />
    <input type="submit" id="searchsubmit" value="'. esc_attr__('Search') .'" />
    </div>
    </form>';

    if ( $echo )
        echo apply_filters('get_search_form', $form);
    else
        return apply_filters('get_search_form', $form);
}

Кажется, это не работает. Эта проблема сложнее, чем мне кажется? Или я на правильном пути? Кто-нибудь знает простой способ кодирования этого?

Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 27 декабря 2011

Вы можете добавить поисковый запрос к вашему URL с помощью &, например

&s=mysearchhere

Первый бит данных после основного URL начинается с '?' затем для каждого дополнительного бита данных после этого к нему всегда добавляется '&'. Вам никогда не нужно '&?' вместе.

И получить его с помощью

$query = $_GET['s'];

Может быть, это поможет.

1 голос
/ 09 июля 2012

Я просто столкнулся с этой точной проблемой и нашел решение.

Чтобы прояснить проблему, скажем, у вас есть форма поиска:

<form method="get" action="http://myblog.com/?taxonomy1=term1">
<input type="text" name="keyword" />
</form>

Обратите внимание, что ключ / значение taxonomy1 = term1 является частью URL-адреса действия.

Теперь скажите, что пользователь выполняет поиск "asdf".Вот что я наивно ожидал, что URL будет:

http://myblog.com/?taxonomy1=term1&keyword=asdf

Вот какой URL был на самом деле:

http://myblog.com/?keyword=asdf

Часть URL, которая имеет ключ / значение "taxonomy1"= термин "будет удален.

Способ" добавить строку запроса назад "состоит в добавлении скрытого поля ввода в форму:

<input type="hidden" name="taxonomy1" value="term" />

Чтобы добавить дополнительные аргументы в строку запросаВы можете добавить произвольное количество входов скрытого типа, например так:

<input type="hidden" name="taxonomy1" value="term" />
<input type="hidden" name="taxonomy2" value="term3" />

Я только что проверил это, так что я уверен, что это работает!

...