繁体   English   中英

WordPress的ajax WP_Query

[英]Wordpress ajax WP_Query

我正在尝试使用变量通过ajax加载帖子以按年份获取帖子。 我发现了这个很棒的教程https://www.creare.co.uk/blog/simple-wp_query-ajax ,我正在尝试根据自己的需要进行修改,但是我对Ajax的使用经验为0,而对jquery的了解却不多...

这是我修改过的代码,但是还没有过一年,我也不知道该怎么做,我非常感谢您的帮助

js

//If input is changed, load posts
$('#genre-filter input').live('change', function(){
    genre_get_posts(); //Load Posts
});

//Find Selected Genres
function getSelectedGenres()
{
    var genres = [];

    $("#genre-filter div").click(function() {
        var genres = $(this).attr('value');
        console.log(genres);
    });        

    return genres;
}

//Main ajax function
function genre_get_posts(paged)
{

    var ajax_url = ajax_genre_params.ajax_url;

    $.ajax({
        type: 'GET',
        url: ajax_url,
        data: {
            action: 'genre_filter',
            genres: getSelectedGenres,

        },
        beforeSend: function ()
        {
            //Show loader here
        },
        success: function(data)
        {
            //Hide loader here
            $('#genre-results').html(data);
        },
        error: function()
        {
            $("#genre-results").html('<p>There has been an error</p>');
        }
    });                
}

模板

<section id="primary" class="content-area">
<div id="content" class="site-content" role="main">
    <?php
    if ( have_posts() ):
        while ( have_posts() ): the_post();
    get_template_part( 'content' );
    endwhile;
    endif;
    ?>
    <div class="entry-content">
        <div id="genre-filter">
            <div id="2018" value="2018" name="filter_genre[]">2018</div>
            <div id="2017" value="2017" name="filter_genre[]">2017</div>
      </div>
        <div id="genre-results"></div>
    </div>
</div>

functions.php

function ajax_genre_filter() {
    $query_data = $_GET;
    $genre_terms = ( $query_data[ 'genres' ] ) ? explode( ',', $query_data[ 'genres' ] ) : false;
    $book_args = array(
        'post_type' => 'book',
        'posts_per_page' => 2,
        'year' => $genre_terms,
    );
    $book_loop = new WP_Query( $book_args );

    if ( $book_loop->have_posts() ):
        while ( $book_loop->have_posts() ): $book_loop->the_post();
            get_template_part( 'content' );
        endwhile;
        echo $query_data;
    else :
        get_template_part( 'content-none' );
    endif;
    wp_reset_postdata();
    die();
}

您的第一个问题是getSelectedGenres变量作用域。 我想像一下,由于事件处理程序中的第二个var ,您总是得到一个空数组。 请尝试下面的修改版本。

function getSelectedGenres()
{
  var genres = [];

  $("#genre-filter div").click(function() {
    var g = $(this).attr('value');
    genres.push(g);
    console.log(g);
  });        

  return genres;
}

另外,看起来ajax_genre_filter基于映射'year' => $genre_terms从类型查询字符串genres读取年份,因此请尝试在函数getSelectedGenres包括所选年份。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM