Wordpress: форма поиска для пользовательской таксономии (через поле ввода, а не раскрывающееся меню)

Я сделал пользовательскую страницу таксономии: aamir khan, salman khan, aab cc ..etc, поэтому ее ссылка:

localhost/myproject/?motion=аамир-хан

.. llly для других.

Теперь мне нужна форма пользовательского поиска: где любой поиск аамира хана .. он должен показывать ту же пользовательскую страницу таксономии аамира хана. Ниже моя пользовательская форма поиска:

<form role="customsearch" method="get" id="customsearchform" action="<?php echo home_url('/'); ?>">
<div>
<label for="s">Search for:</label>
<input type="text" value="" name="motion" id="motion" />
<input type="submit" id="customsearchsubmit" value="Search Motion" />
</div>
</form>

но когда я ищу с Аамиром Кханом в форме поиска выше, он показывает мне «Страница не найдена»

как сгенерированная ссылка

localhost/myproject/?motion=аамир+хан

я знаю, что aamir khan оба будут читаться как разные слова в поиске «GET» .. поэтому отображается «+» ...

следовательно, как лучше всего ... чтобы я мог искать данные таксономии, а прогноз результатов должен быть таким же, как моя пользовательская страница таксономии ...

Примечание: я не использую пользовательский пост...

также я хочу пользовательский поиск в поле ввода для пользовательской таксономии ... не раскрывающийся поиск ..


person user3209031    schedule 07.07.2014    source источник


Ответы (1)


Приведенное ниже решение будет работать только с текущей конфигурацией WordPress.

Обычно люди ищут по названию термина, а не по слагу. Поэтому нам нужно будет найти слаг из значения, введенного конечным пользователем, а затем WordPress покажет содержимое для этого термина.

Добавьте приведенный ниже код в файл functions.php

add_action('init', 'wdm_change_motion_slug');

function wdm_change_motion_slug()
{
    if(isset($_GET['motion']) && !empty($_GET['motion']))
    {
            $term = term_exists($_GET['motion'], 'motion'); //Check if the term already exists

            if ($term !== 0 && $term !== null)
            {
                $_GET['motion'] = get_term_by('id', (int)$term['term_id'], 'motion')->slug; //Find out slug of term from the term id
            }
    }
}

Дайте мне знать, если это решит проблему.

person Domain    schedule 09.07.2014
comment
+1: gr8 работает .. после добавления вашей вышеуказанной функции в мой function.php .. я отлично вижу свой результат .. gr8 спасибо - person user3209031; 09.07.2014