递增PHP变量onClick以按月显示帖子

时间:2017-09-17 作者:AgarAgar

我试图用“上个月”按钮显示当前月份的所有帖子。单击“上个月”按钮将显示的帖子更改为上个月的帖子,而不刷新页面(即,如果页面当前显示的是9月份的帖子,单击按钮将用8月份的帖子替换)。

我一直在尝试使用AJAX来实现这一点,但到目前为止,我还无法让它发挥作用。

职位。php

<div class="post-body">
<?php 
    $year = date(\'Y\', current_time(\'timestamp\'));
    $month = date(\'m\', current_time(\'timestamp\'));

get_posts($month, $year);?>
</div>
ajax分页。js公司

(function($) {
        $(document.body).on(\'click\', \'#previous\', function(e) {
        e.preventDefault();
        $.ajax({
        url: ajaxpagination.ajaxurl,
        type: \'post\',
        data: {
              action: \'ajax_pagination\'
              },
        success:function( result) {
        alert( result);
      }
  })
       });
  })(jQuery);
功能。php

function get_posts($month,$year) {                
            query_posts("year=$year&monthnum=$month");
            $dateObj   = DateTime::createFromFormat(\'!m\', $month);
            $monthName = $dateObj->format(\'F\');
                echo "<h1>"$monthName" ",$year,"</h1>\\n\\n";
                if(have_posts()) : while(have_posts()) : the_post();
                ?>
                <div class="post-excerpt">
                <p class="date"><?php echo get_the_date(); ?></p>
                <div class="title"><h3><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></div>
                <div class="excerpt"><?php the_excerpt(__(\'(more…)\')); ?></div>
                </div>

                <?php endwhile; else : ?>
                     <div class="title"><h3><?php esc_html_e( \'There are no posts.\' ); ?></h3></div>
                <?php endif; wp_reset_query();}

function my_ajax_pagination() {
        die(); 
    }
实际上,我希望每次单击按钮时$month和$year变量减少1,并将新变量传递给get\\u posts函数。有没有可能让Javascript和PHP以这种方式进行通信,或者我应该尝试另一种方法?

1 个回复
SO网友:stiil

首先尝试注册一个处理ajax调用的函数。

// For logged out users
add_action( \'wp_ajax_nopriv_wp280265_pagination\', \'wp280265_pagination\' );
// For logged in users
add_action( \'wp_ajax_wp280265_pagination\', \'wp280265_pagination\' );
定义函数。

function wp280265_pagination() {
    $month = $_POST[\'month\'];
    $year = $_POST[\'year\'];

    if ($month != \'\' && $year != \'\')
        get_posts($month, $year);
}
定义JavaScript。

(function($) {
    $(document.body).on(\'click\', \'#previous\', function(e) {
        e.preventDefault();
        var month = $(this).data(\'month\');
        var year = $(this).data(\'year\');
        $.ajax({
            url: ajaxpagination.ajaxurl,
            type: \'post\',
            data: {
                action: \'wp280265_pagination\',
                month: month,
                year: year
            },
            success: function(result) {
                $(this).data(\'month\', month + 1);
                $(this).data(\'year\', year + 1);
            }
        })
    });
})(jQuery);
排队并注册。

add_action( \'wp_enqueue_scripts\', \'ajax_wp280265_enqueue_scripts\' );
function ajax_wp280265_enqueue_scripts() {
    wp_enqueue_script( \'wp280265\', plugins_url( \'/ajaxpagination.js\', __FILE__ ), array(\'jquery\'), \'1.0\', true );
    wp_localize_script( \'wp280265\', \'ajaxpagination\', array(
        \'ajaxurl\' => admin_url( \'admin-ajax.php\' )
    ));
}
没有测试代码,但过程应该是正确的。

结束