Проблемы с шаблоном при получении результатов поиска ajax

Я пытаюсь поместить результаты поиска в div с помощью ajax. Проблема заключается в том, что я получаю сообщения об ошибках при объявлении поискового шаблона неопределенной функцией have_posts() . Также возникает проблема с get_header()

  <div id="my_search">
   <form role="search" method="get" id="searchform" action="http://myurl.com/" >
    <input type="text" value="" name="s" id="s" />
    <input type="submit" id="searchsubmit" value="Search" />
   </form>
  </div>
  <div id="results"></div>
  <script type="text/javascript">
    $(document).ready(function(){
    $("#searchsubmit").click(function(e){
     e.preventDefault();
     var search_val=$("#s").val(); 
     $.post('http://mysite.com/wp-content/themes/beta/search-results.php',{search_string:search_val},function(data){
        if(data.length>0){
            $("#results").html(data);
        }
     });
    });   
   });
  </script>

Мой шаблон search-results.php. Мне интересно, может быть я не передаю результаты поиска в шаблон.

<ul>
 <?php if (have_posts()) : while (have_posts()) : the_post();  ?>
  <li><a title="Permalink to this post" href="<?php echo get_permalink(); ?>"><?php the_title(); ?></a></li>

 <?php endwhile; endif; ?>
 <?php if (!have_posts()) { echo('<li>No results to show.</li>'); } ?>
</ul>

Понравилась статья? Поделиться с друзьями:
WPAsk
Ответов: 2
  1. Milo

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

    Вы можете либо загрузить страницу поиска в интерфейс , либо отфильтровать результат, например:

    $('#results').load('http://mysite.com/?s=searchterm ul#target');
    

    Или создайте функцию поиска, используя WordPress, предоставленную AJAX-функциональность (см. http://codex.wordpress.org/AJAX_in_Plugins) в плагинах .

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

    Вот пример того, как я загружаю дополнительные сообщения через AJAX, которые вы можете адаптировать для создания функции поиска, если хотите.

    Во-первых, в functions.php я ставлю свой javascript в очередь и локализую скрипт, чтобы передать URL AJAX, который будет обрабатывать мои запросы. WordPress AJAX использует admin-ajax.php для обработки всех запросов AJAX, внешнего или внутреннего интерфейса:

    add_action( 'wp_enqueue_scripts', 'wpa56343_scripts', 100 );
    
    function wpa56343_scripts() {
        wp_enqueue_script(
            'wpa56343_script',
            get_template_directory_uri() . '/js/scripts.js?ver=1.0',
            array( 'jquery' ),
            null,
            false
        );
        wp_localize_script(
            'wpa56343_script',
            'WPaAjax',
            array(
                'ajaxurl' => admin_url( 'admin-ajax.php' )
            )
        );
    }
    

    В scripts.js мой javascript, который вызывает мое действие AJAX и передает переменную postoffset , чтобы я мог передать это в запрос. Также обратите внимание на использование WPaAjax.ajaxurl для передачи URL, который будет обрабатывать этот запрос:

    jQuery(document).ready(function($){
    
        $('#blog-more').click(function(e){ // <- added
            e.preventDefault(); 
            var postoffset = $('.post').length;
            $.post(
                WPaAjax.ajaxurl,
                {
                    action : 'wpa56343_more',
                    postoffset : postoffset
                },
                function( response ) {
                    $('#container').append( response );
                }
            );
        });
    
    });
    

    В functions.php функция, которая обрабатывает мой AJAX-запрос, сопоставленный с действием, которое я передал в javascript выше.

    Ускоренная версия WordPress загружается, поэтому я могу получить доступ к большинству функций WordPress:

    add_action('wp_ajax_wpa56343_more', 'wpa56343_more');
    add_action('wp_ajax_nopriv_wpa56343_more', 'wpa56343_more');
    
    function wpa56343_more(){
        global $wp_query;
    
        $offset = $_POST['postoffset'];
        $args = array(
            'offset' => $offset,
            'posts_per_page' => 10
        );
        $wp_query = new WP_Query( $args );
    
        get_template_part( 'post-template' );
    
        exit;
    }
    

    1. Pollux Khafra

      Все работает отлично! Спасибо =) =)

Добавить ответ

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: