通过AJAX过滤自定义分类帖子

时间:2017-05-28 作者:magdazelena

我一直在尝试通过点击一些图标来创建博客帖子的动态排序。帖子是自定义的帖子类型,并且具有自定义的分类法。

The objective is:<单击(自定义分类法的)类别名称,在下面显示(附加)该类别的帖子。

The problem is:
WP\\u查询不接受参数
success函数的结果是WP\\u查询参数,而不是html对象或js端可用的任何东西。

The flow:
我注册并本地化了脚本:

wp_enqueue_script( \'ajax-pagination\',  get_stylesheet_directory_uri() . \'/library/js/ajax-pagination.js\', array( \'jquery\' ), \'1.0\', true );



wp_localize_script( \'ajax-pagination\', \'ajaxpagination\', array(
                \'ajaxurl\' => admin_url( \'admin-ajax.php\' )
 ));
在服务器端,我执行以下操作:

add_action( \'wp_ajax_nopriv_ajax_pagination\', \'my_ajax_pagination\' );
add_action( \'wp_ajax_ajax_pagination\', \'my_ajax_pagination\' );

function my_ajax_pagination() {
    $name = $_POST[\'termname\']; 
    $args = array(
        \'post_type\' => \'myposttype\',
        \'tax_query\' => array(
            array(
                \'taxonomy\' => \'mytaxonomyname\',
                \'field\' => \'slug\', 
                \'terms\' =>  $name 
            )
        )
    );
    $posts = new WP_Query( $args );
    $GLOBALS[\'wp_query\'] = $posts;


    if( ! $posts->have_posts() ) { 
        echo "I don\'t work yet";
    }
    else {
        while ( $posts->have_posts() ) { 
            $posts->the_post();
            $text = apply_filters(\'the_excerpt\', 
            get_post_field(\'post_excerpt\', $post_id));
            echo $text;
        }
    }


    die();
}
在我使用的ajax文件中:

(function($) {


    function get_the_category(element){
        return element.context.id;
    };

    $(document).on( \'click\', \'.cat-icons a\', function( event ) {
        event.preventDefault();

        var termname = get_the_category( $(this).clone() );

        $.ajax({
            url: ajaxpagination.ajaxurl,
            type: \'post\',
            data: {
                action: \'ajax_pagination\',
                termname: termname
            },
            success: function( html ) {
                console.log(html);
                //here will do stuf
            }
        })
    })
})(jQuery);
是的,我试着查了一下,没有,我还没有找到答案,我想知道我做错了什么。我不熟悉AJAX和自定义帖子类型。

Questions:
1。如何通过这种方法实现目标
2。方法是否正确&;安全吗
3。那是怎么发生的我明白了$args 回来了
4。我试着用query_vars 但失败了。我找不到tax_query 附加到query_vars.

非常感谢。

1 个回复
最合适的回答,由SO网友:Milo 整理而成

我不知道你为什么会看到WP_Query 返回的数据中的参数,在此处复制/粘贴您的代码(进行一些调整-发布类型、分类法和术语名称)不会产生该结果。

通过获取帖子摘录get_post_field 只有在该字段中显式输入摘录时才有效,它不会从中生成摘录post_content. 您还没有定义$post_id, 但这不重要,因为它将回落到当前水平$post.

这是一个删除了不必要的位并进行了一些轻微调整的版本:

function my_ajax_pagination() {
    $name = $_POST[\'termname\']; 
    $args = array(
        \'post_type\' => \'myposttype\',
        \'posts_per_page\' => -1,
        \'tax_query\' => array(
            array(
                \'taxonomy\' => \'mytaxonomyname\',
                \'field\' => \'slug\', 
                \'terms\' =>  $name 
            )
        )
    );
    $posts = new WP_Query( $args );

    if( ! $posts->have_posts() ) { 
        echo "I don\'t work yet";
    }
    else {
        while ( $posts->have_posts() ) { 
            $posts->the_post();
            echo get_the_excerpt();
        }
    }

    die();
}
我建议的另一个更改是将您的post数据放入一个数组中,并通过wp_send_json 而不是直接回显数据和标记。

结束

相关推荐

不使用admin-ajax来提交ajax可以吗?

我正在使用ajax提交一个表单,将数据插入表中。php$data = array(\'full_name\' => $_POST[\'fullname\'] , \'email\' => $_POST[\'email\'] ); $type= array(\'%s\' , \'%s\'); $wpdb->insert( \'email_database\', $data, $type); javascript$(function() { $