2015-04-29 7 views
0

Я пытаюсь адаптировать существующий поиск, чтобы можно было искать не только имена сотрудников, но и их названия (рабочие роли).Адаптация поиска WordPress для поиска нескольких полей

В настоящее время Ниже приведен метод формы:

<form method="get" action="<?php echo get_post_type_archive_link('staff'); ?>" class="search" data-behavior="search"> 

и это get_post_type_archive_link функция

function get_post_type_archive_link($post_type) { 
    global $wp_rewrite; 
    if (! $post_type_obj = get_post_type_object($post_type)) 
     return false; 

    if (! $post_type_obj->has_archive) 
     return false; 

    if (get_option('permalink_structure') && is_array($post_type_obj->rewrite)) { 
     $struct = (true === $post_type_obj->has_archive) ? $post_type_obj->rewrite['slug'] : $post_type_obj->has_archive; 
     if ($post_type_obj->rewrite['with_front']) 
      $struct = $wp_rewrite->front . $struct; 
     else 
      $struct = $wp_rewrite->root . $struct; 
     $link = home_url(user_trailingslashit($struct, 'post_type_archive')); 
    } else { 
     $link = home_url('?post_type=' . $post_type); 
    } 

    return apply_filters('post_type_archive_link', $link, $post_type); 
} 
+0

Что делает эта функция делать в настоящее время ? Я не WP dev, но мне интересно, смогут ли люди, которым это легче ответить, если они понимают разницу между тем, что у вас есть и что вы хотите. – halfer

+1

спасибо! это часть проблемы. Я не изначально написал этот код, и тот, кто это сделал, теперь ушел. Эта функция относится к поисковому действию, и, насколько мне известно. В настоящее время происходит то, что есть форма поиска в верхней части страницы, за которой следует список сотрудников и ссылки на их профили. Мне нужно заставить его работать, поэтому поиск работает не только по имени, но и по поиску названия (роли работы), если кто-то хочет искать всех людей с определенной работой. –

ответ

2

Эта функция не имеет ничего общего с поиском базы данных Wordpress. Вместо этого он повторяет URL-адрес, который сообщает форме, куда отправить. Что вам нужно узнать, это то, что происходит, когда форма отправляется на этот URL. Существуют некоторые стандартные функции Wordpress и фильтры для поиска, но я предполагаю, что на основе того, что вы показали здесь, есть также некоторые пользовательские функции в коде где-то, где выполняется поиск, используя слово «штат».

Где эта функция? Это в плагине? Тема? Существуют ли другие функции вокруг него? Я бы предложил посмотреть вокруг в общей области этой функции для чего-то, что имеет некоторые sql-запросы и вставить , что функция здесь для нас.

+0

Я бы добавил к этому, что если текущий код можно добавить в элемент управления версиями (или, по крайней мере, с помощью копии), вы можете добавить операторы echo' для отслеживания выполнения в темах/плагинах и т. Д. До тех пор, пока не будет найдена функция поиска. Тогда, по крайней мере, вы узнаете, какой бит изменить! – halfer

0

Я не знаю, если я понимаю правильно, но следует пользовательский поиск названий, содержания, а также для пользовательских полей (если у вас есть)

<?php //LOOP PARA BUSCA COM TODOS CUSTOM FIELD 
    $keyword = get_search_query(); 
    $keyword = '%' . like_escape($keyword) . '%'; // Thanks Manny Fleurmond 
// SEARCH FROM ALL CUSTOM FIELDS 
$post_ids_meta = $wpdb->get_col($wpdb->prepare(" 
ALTER TABLE wp_posts ADD INDEX (postmeta) 
SELECT DISTINCT post_id FROM {$wpdb->postmeta} 
WHERE meta_value LIKE '%s' 
", $keyword)); 

// SEARCH FOR TITLE AND CONTENT 
$post_ids_post = $wpdb->get_col($wpdb->prepare(" 
ALTER TABLE wp_post s ADD INDEX (posts); 
SELECT DISTINCT ID FROM {$wpdb->posts} 
WHERE post_title LIKE '%s' 
OR post_content LIKE '%s' 
", $keyword, $keyword)); 
$post_ids = array_merge($post_ids_meta, $post_ids_post); 

$wpq = array(
'taxonomy'=>'segmento', 

'post_status' => 'publish', 
'post_type' => 'CUSTOM-POST-TYPE', 
'paged' => get_query_var('paged'), 
'post__in' => $post_ids, 
'order' => 'ASC', 

); 

    query_posts($wpq); 

удачи