2016-02-15 3 views
0

У меня есть рабочий загрузчик AJAX, но я не могу заставить его работать на странице категории. Что я делаю не так? Я думаю, что я неправильно получаю категории?Ajax category post loader

category.php код:

<div id="ajaxCatPosts" class="cat-post-side left small-12 large-9"> 
    <?php 
    while (have_posts()) : the_post(); 
     include(__DIR__.'/views/cat-post-thumb.php'); 
    endwhile; 
    ?> 
    <div class="load-button"> 
     <button id="more_cat_posts">Veel uudiseid</button> 
    </div> 
</div> 

functions.php код:

function more_post_ajax(){ 

     $ppp = (isset($_POST["ppp"])) ? $_POST["ppp"] : 16; 
     $page = (isset($_POST['pageNumber'])) ? $_POST['pageNumber'] : 0; 

     header("Content-Type: text/html"); 

     $args = array(
      'suppress_filters' => true, 
      'posts_per_page' => $ppp, 
      'paged' => $page, 
     ); 

     $loop = new WP_Query($args); 

     if ($loop -> have_posts()) : while ($loop -> have_posts()) : $loop -> the_post(); 

      include(__DIR__.'/views/cat-post-thumb.php'); 

     endwhile; 
     endif; 
     wp_reset_postdata(); 
     die($out); 
    } 

    add_action('wp_ajax_nopriv_more_post_ajax', 'more_post_ajax'); 
    add_action('wp_ajax_more_post_ajax', 'more_post_ajax'); 

А вот loadmore.js:

$(function() { 
    var ppp = 16; // Post per page 
    var pageNumber = 1; 

    function load_posts(){ 
     pageNumber++; 
     var str = '&pageNumber=' + pageNumber + '&ppp' + ppp + '&action=more_post_ajax'; 
     $.ajax({ 
      type: "POST", 
      dataType: "html", 
      url: ajax_posts.ajaxurl, 
      data: str, 
      success: function(data){ 
       var $data = $(data); 
       if($data.length){ 
        $("#ajax-posts").append($data); 

        $("#more_posts").attr("disabled",false); 
       } else{ 
        $("#more_posts").attr("disabled",true); 
       } 
      }, 
      error : function(jqXHR, textStatus, errorThrown) { 
       $loader.html(jqXHR + " :: " + textStatus + " :: " + errorThrown); 
      } 

     }); 
     return false; 
    } 

    $('#more_posts').unbind('click'); 

    $("#more_posts").on("click",function(){ // When btn is pressed. 
     $("#more_posts").attr("disabled",true); // Disable the button, temp. 
     load_posts(); 
    }); 
}); 
+0

Что не работает? Вы должны быть конкретными о том, что вы ожидаете * и о том, что вы на самом деле * возвращаетесь. –

+0

Я получаю все сообщения. Но id любит иметь рубричные посты. Например, если im на странице с архивной страницей, то он загружает мне только сообщения с молоком категории не всех. –

ответ

0

Чтобы сделать его работу более динамично с любой систематики или комбинации так что эти решения будут работать не только в категории .php, но и в любом другом случае. Например, JS может передавать аргументы аргумента таксономии, откуда следует извлекать pposts.

Итак, сначала в вашем вызове AJAX нам нужно передать термин, в котором мы хотим загрузить наши сообщения, скажем, категория называется milk. (А также позволяет сделать аргументы POST более читаемым)

function load_posts(){ 
    pageNumber++; 

    var str = { 
     pageNumber: pageNumber, 
     ppp: ppp, 
     term: 'milk', 
     action: 'more_post_ajax' 
    }; 

    $.ajax({ 
     type: "POST", 
     dataType: "html", 
     url: ajax_posts.ajaxurl, 
     data: str, 
     success: function(data){ 
      var $data = $(data); 
      if($data.length){ 
       $("#ajax-posts").append($data); 

       $("#more_posts").attr("disabled",false); 
      } else{ 
       $("#more_posts").attr("disabled",true); 
      } 
     }, 
     error : function(jqXHR, textStatus, errorThrown) { 
      $loader.html(jqXHR + " :: " + textStatus + " :: " + errorThrown); 
     } 

    }); 
    return false; 
} 

В вашем PHP код

function more_post_ajax(){ 

    $ppp = (isset($_POST["ppp"])) ? $_POST["ppp"] : 16; 
    $page = (isset($_POST['pageNumber'])) ? $_POST['pageNumber'] : 0; 
    $term = isset($_POST['term']) ? $_POST['term'] : 0; 

    header("Content-Type: text/html"); 

    $args = array(
     'suppress_filters' => true, 
     'posts_per_page' => $ppp, 
     'paged' => $page, 
     'tax_query' => array(
      array(
       'taxonomy' => 'category', 
       'field' => 'slug', // Depends whether JS passes you slug or ID of taxonomy term, in our case it is a slug 
       'terms' => array($term), 
      ) 
     ), 
    ); 

    $loop = new WP_Query($args); 

    if ($loop -> have_posts()) : while ($loop -> have_posts()) : $loop -> the_post(); 

     include(__DIR__.'/views/cat-post-thumb.php'); 

    endwhile; 
    endif; 
    wp_reset_postdata(); 
    die(); 
} 

add_action('wp_ajax_nopriv_more_post_ajax', 'more_post_ajax'); 
add_action('wp_ajax_more_post_ajax', 'more_post_ajax'); 

Ваш WP_Query теперь жёстко искать от category систематике, где Столбики имеют условия, которые соответствуют с запрошены из них. Вы можете изменить его на все, что хотите, и не зацикливаться на таксономии category, только если вы измените tax_query в своих аргументах. Чтобы быть более безопасным, вы можете проверить, существует ли этот термин в этой таксономии.

0

Ответ на ваш вопрос, как представляется, в documentation here.

В частности, перед тем как позвонить в WP_Query, вам необходимо указать категорию, которую вы хотите. Вы в настоящее время настройки запроса здесь:

$args = array(
    'suppress_filters' => true, 
    'posts_per_page' => $ppp, 
    'paged' => $page, 
); 

И вам необходимо продлить, что это:

$args = array(
    'category_name' => $category 
    'suppress_filters' => true, 
    'posts_per_page' => $ppp, 
    'paged' => $page, 
); 

Это означает, что вызов AJAX нужно будет включать в себя категорию, которую хотите (`$ category) в JSON, или вам придется извлечь его из URL-адреса страницы. Один из способов, вы могли бы сделать это:

$args = array(
    'suppress_filters' => true, 
    'posts_per_page' => $ppp, 
    'paged' => $page, 
); 
if (isset($_POST["category"]){ 
    $args['category_name'] = $_POST["category"]; 
} 

Соответственно, вам необходимо обновить ваш вызов AJAX, чтобы иметь категорию элемента:

var str = '&pageNumber=' + pageNumber + '&ppp' + ppp + '&action=more_post_ajax' + '&category=milk'; 
+0

Как сделать этот элемент категории вызовов AJAX динамическим? Что это зависит от того, на какой странице категории эта кнопка? –

+0

Вам, вероятно, придется анализировать URL-адрес в javascript. http://stackoverflow.com/questions/736513/how-do-i-parse-a-url-into-hostname-and-path-in-javascript –