2015-06-23 6 views
0

Я создаю плагин Wordpress и хотел бы добавить поле для поиска на странице параметров. Я попытался просто добавить стандартную форму поиска WP, используя <input type="text" name="s" id="searchform">, но когда я нажимаю «Отправить», я перенаправляется на страницу настроек «Общие». Как я могу реализовать форму поиска на моей странице параметров плагина и вернуть ли она список сообщений на одну страницу? Я бы хотел сделать это без AJAX, если это возможно. Разметка почтового списка довольно сложная, и было бы нецелесообразно реализовывать ее с помощью JS.Параметры плагина Wordpress Поиск по страницам

Я также попытался скопировать форму поиска HTML на странице «Сообщения». Это приводит к тому же вопросу - перенаправление на страницу настроек «Общие».

ответ

0

Я не хотел использовать AJAX для этого, но в итоге мне пришлось. Решение, которое я придумал, заключается в использовании AJAX для создания URL-адреса «перенаправления» и добавления аргументов запроса с использованием add_query_arg(), а затем возврата URL-адреса с параметрами запроса и использования window.location.href для перенаправления пользователя. Страница перенаправляется с добавленными аргументами запроса, а затем при загрузке страницы WP_Query(); запускается с параметром s=, содержащим параметры запроса.

Возможно, это не самый эффективный способ или даже правильный способ, но он выполняет свою работу. Если у кого есть другое решение, я бы хотел это услышать.

Пример PHP Функция:

public function user_redirect_by_search() { 
    $search_arr = array(); 

    parse_str($_POST['search_data'], $search_arr); 

    $return = array(); 
    $post_type_arr = array(); 
    $post_type_count = 0; 
    foreach($search_arr['post_type'] as $post_type) { 
     $post_type_count++; 
     $post_type_arr[$post_type_count] = $post_type; 
    } 

    $redirect_url = add_query_arg(array('post_type' => implode(",", $post_type_arr), 'keywords' => $search_arr['s']), $search_arr['page_url']); 

    $return['status'] = 1; 
    $return['redirect_url'] = $redirect_url; 

    echo json_encode($return); 
    die(); 
} 

А потом JQuery:

// Post keyword search 
    jQuery('#searchform').on('submit', function(e) { 
     e.preventDefault(); 

     var search_data = jQuery(this).serialize(); 

     jQuery.ajax({ 
      type: "POST", 
      url: ajaxurl, 
      dataType: 'json', 
      data: {"action": "user_search", search_data}, 
      success: function(data) { 
       if(data.status == 1) { 
        window.location.href = data.redirect_url; 
        //console.log(data); 
       } else { 
        alert("Oops, an error occurred. Please try again or contact the plugin developer."); 
        console.log(data); 
       } 
      } 
     }); 
    }); 

Пожалуйста, обратите внимание, что приведенный выше код НЕ введен в эксплуатацию производства, это было просто написано/модифицирован, чтобы показать пример решение вопроса.

0

Текстовое поле ввода должно быть включено в форму. Вот форма html5 по умолчанию. Просто замените свой код на это, а затем исправьте стили.

<form role="search" method="get" class="search-form" action="<?php echo home_url('/'); ?>"> 
    <label> 
     <span class="screen-reader-text"><?php echo _x('Search for:', 'label') ?></span> 
     <input type="search" class="search-field" placeholder="<?php echo esc_attr_x('Search …', 'placeholder') ?>" value="<?php echo get_search_query() ?>" name="s" title="<?php echo esc_attr_x('Search for:', 'label') ?>" /> 
    </label> 
    <input type="submit" class="search-submit" value="<?php echo esc_attr_x('Search', 'submit button') ?>" /> 
</form> 
+0

Извините, это не поможет. Очевидно, что форма должна быть заключена в элемент формы, а использование 'home_url()' в действии перенаправляет меня во внешний интерфейс сайта. Как указано в вопросе, мне нужно остаться в панели инструментов на той же странице параметров, на которую была отправлена ​​форма. –

+0

Вы хотите внедрить функцию поиска внутри панели администратора (страница параметров)? –

Смежные вопросы