Как правильно составить цикл Wordpress?

305
07 сентября 2017, 19:39

Здравствуйте. Передо мной стоит задача сделать список рубрик, под рубриками выводятся все записи в количестве 9 штук, если больше, то нужна цифровая пагинация. При нажатии на ссылку рубрики происходит сортировка записей через и меняется соответственно пагинация для уже нового списка. Изначально была реализована Ajax сортировка, но в дальнейшем при добавлении пагинации, она не учитывает уже отсортированные записи, и не удается почему то таким образом вывести изначально на страницу только 9 записей, выводятся сразу все. Может кто подсказать как можно сделать, желательно с примером. А то пока wordpress на низком уровне.

blog.php

<form action="<?php echo site_url() ?>/wp-admin/admin-ajax.php" method="POST" id="filter">
    <section class="portfolio-banner">
        <div class="container">
            <h2>Блог компании</h2>
            <span>Думаем и размышляем</span>
            <ul class="p-list">
                <?php
                if( $terms = get_terms( 'category', 'orderby=name' ) ) :
                    foreach ($terms as $term) :
                        echo '<li data-termid="'. $term->term_id .'">' . $term->name . '</li>';
                    endforeach;
                endif;
                ?>
            </ul>
        </div>
    </section>
    <section class="may blog">
        <div class="container">
            <div class="projects" id="response">
                <?php
                $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
                $args = array('posts_per_page' => 9,
                              'paged' => $paged);
                $custom_query = new WP_Query( $args );
                while($custom_query->have_posts()) : 
                   $custom_query->the_post();   
               ?>
               <div class="project">
                    <a href="<?php echo get_permalink(); ?>"><div class="project-img" style="background: url('<?php echo get_the_post_thumbnail_url(); ?>')"></div></a>
                    <p class="may-title"><?php the_title(); ?></p>
                    <p class="may-annotice"><?php the_excerpt(); ?></p>
                    <p class="post-date"><?php the_date('d/m/Y'); ?></p>
                </div>
              <?php endwhile; ?>
            </div>
            <?php if (function_exists("pagination")) {
                pagination($custom_query->max_num_pages);
            } ?>
        </div>
    </section>
<input type="hidden" name="action" value="myfilter">

functions.php

    function pagination($pages = '', $range = 4)
{  
     $showitems = ($range * 2)+1;  
     global $paged;
     if(empty($paged)) $paged = 1;
     if($pages == '')
     {
         global $wp_query;
         $pages = $wp_query->max_num_pages;
         if(!$pages)
         {
             $pages = 1;
         }
     }   
     if(1 != $pages)
     {
         echo "<div class=\"pagination\"><span>Page ".$paged." of ".$pages."</span>";
         if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo "<a href='".get_pagenum_link(1)."'>&laquo; First</a>";
         if($paged > 1 && $showitems < $pages) echo "<a href='".get_pagenum_link($paged - 1)."'>&lsaquo; Previous</a>";
         for ($i=1; $i <= $pages; $i++)
         {
             if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems ))
             {
                 echo ($paged == $i)? "<span class=\"current\">".$i."</span>":"<a href='".get_pagenum_link($i)."' class=\"inactive\">".$i."</a>";
             }
         }
         if ($paged < $pages && $showitems < $pages) echo "<a href=\"".get_pagenum_link($paged + 1)."\">Next &rsaquo;</a>";  
         if ($paged < $pages-1 &&  $paged+$range-1 < $pages && $showitems < $pages) echo "<a href='".get_pagenum_link($pages)."'>Last &raquo;</a>";
         echo "</div>\n";
     }
}
function true_filter_function(){
    // для таксономий
    if(!empty($_POST['foliocat'])) :
        $args['tax_query'][] = array(
            'taxonomy' => 'folio_cat',
            'field' => 'id',
            'terms' => $_POST['foliocat']
        );
    endif;
    if(!empty($_POST['postcat'])) :
        $args['tax_query'][] = array(
            'taxonomy' => 'category',
            'field' => 'id',
            'terms' => $_POST['postcat']
        );
    endif;
    $query = new WP_Query( $args );

    if(!empty($_POST['foliocat'])) {
        if( $query->have_posts() ) :
            while( $query->have_posts() ): $query->the_post();
                echo '<div class="project"><a href="'.get_the_permalink(get_the_ID()).'"><div class="project-img" style="background:url('.get_the_post_thumbnail_url().')"></div></a>';
                echo '<span>'. get_the_title() .'</span>';
                echo '<p>'. get_the_excerpt() .'</p>';
                echo '<p class="post-date">'. get_the_date('d/m/Y') .'</p></div>';
            endwhile;
            wp_reset_postdata();
        else :
            echo 'No posts found';
        endif;
    }

    if(!empty($_POST['postcat'])) {
        if( $query->have_posts() ) :
            while( $query->have_posts() ): $query->the_post();
                echo '<div class="project"><a href="'.get_the_permalink(get_the_ID()).'"><div class="project-img" style="background:url('.get_the_post_thumbnail_url().')"></div></a>';
                echo '<span>'. get_the_title() .'</span>';
                echo '<p>'. get_the_excerpt() .'</p>';
                echo '<p class="post-date">'. get_the_date('d/m/Y') .'</p></div>';
            endwhile;
            wp_reset_postdata();
        else :
            echo 'No posts found';
        endif;
    }

    die();
}
add_action('wp_ajax_myfilter', 'true_filter_function');
add_action('wp_ajax_nopriv_myfilter', 'true_filter_function');

main.js

    $('#filter .p-list li').click(function(){
    var that = this;
    var filter = $("#filter");
    var datas = {
        action: 'myfilter'
    };
    if($('section').is('.may.blog')){
        datas['postcat'] = jQuery(that).data("termid");
    }else{
        datas['foliocat'] = jQuery(that).data("termid");
    }
    console.log(datas);
    $.ajax({
        url:filter.attr('action'),
        data: datas, // данные
        type:filter.attr('method'), // тип запроса
        beforeSend:function(xhr){
            filter.find('#response').text('Загружаю...'); // изменяем текст кнопки
          },
          success:function(data){
            $('#response').attr("data-curcat", jQuery(that).data("termid"));
            $('#response').html(data);
          }
        });
});

Что я делаю не так?

READ ALSO
Отображение php секций в html

Отображение php секций в html

ЗдравствуйтеЕсть пару очень старых блогов, которые необходимо перенести на новый хост

268
Не могу перенести сайт на yii на OpenServer

Не могу перенести сайт на yii на OpenServer

Есть надобность перенести сайт на локалку чтобы поработать с фронтомСразу скажу сайт я не делал, и в Yii не разбираюсь

253
Неправильно выводит дату - php

Неправильно выводит дату - php

Непонятно, то ли баг, то ли работают эти методы по непонятной логике

280
Как изменить определить id товара?

Как изменить определить id товара?

Имеется массив Данные с API

215