0

我正在使用在GitHub 上找到的这个脚本“WordPress CPT Ajax 过滤” 。

除了“全部”过滤器之外,一切都按我的需要工作,单击此按钮,所有帖子都会消失,我收到以下错误,但其他猫过滤器可以工作。

XHR 加载失败:POST “ ** /wp-admin/admin-ajax.php”。发送@jquery.min.js:2

有人经历过同样的事情或知道如何让它工作吗?

前 2 个片段位于主题模板页面文件中。functions.php 中的最后一个片段

  <section class="space80" id="team">
        <h2 class="txtGradient"> family </h2>
    
    <div class="filter-contain">
        <?php
          $taxonomy = 'team_location';
          $tax_terms = get_terms($taxonomy);
        ?>
        
        <ul>
            <li id="all-projects" style="display:none;">
                <a href="#" class="all-cats  ajax" data-cpt-name="project" id="all-projects-link">All</a>
            </li>
            <li id="cat-42">
                <a href="#" class="emea ajax" data-term-number="42" title="All">All</a>
            </li>           
            <li id="cat-38">
                <a href="#" class="emea ajax" data-term-number="38" title="EMEA">EMEA</a>
            </li>
                    <li id="cat-40">
                <a href="#" class="americas ajax" data-term-number="40" title="Americas">Americas</a>
            </li>
                    <li id="cat-39">
                <a href="#" class="asia ajax" data-term-number="39" title="Asia">Asia</a>
            </li>
                    <li id="cat-41">
                <a href="#" class="australasia ajax" data-term-number="41" title="Australasia">Australasia</a>
            </li>
          </ul>
        
    </div>
        
    <div id="category-post-content" class="project-container row">
        <?php $loop = new WP_Query( array( 'post_type' => 'team-member', 'posts_per_page' => 20, 'orderby' => 'ID', 'order' => 'ASC', ) );
            if ( $loop->have_posts() ) :
            while ( $loop->have_posts() ) : $loop->the_post(); ?>
                <div class="col-md-6 col-lg-4 space30">
                <div class="project-tile ">
                    <a href="<?php the_permalink(); ?>"> <?php echo get_the_post_thumbnail( $page->ID, 'large' ); ?></a>
                    <div class="project-text">
                        <h3 class="posttitle">
                            <?php echo get_the_title(); ?>
                        </h3>
                        <h4>
                            <?php the_field('team_title'); ?>
                        </h4>
                    </div>
                    </div> 
                    </div> 
        <?php endwhile; endif; wp_reset_postdata(); ?>
    </div>
</section>

function cat_ajax_get(catID) {
    var ajaxurl = '/wp-admin/admin-ajax.php';
    jQuery.ajax({
        type: 'POST',
        url: ajaxurl,
        data: {"action": "load-filter", cat: catID },
        success: function(response) {
            jQuery("#category-post-content").html(response);
            return false;
        }
    });
}
function all_cats_ajax_get(cptID) {
    var ajaxurl = '/wp-admin/admin-ajax.php';
    jQuery.ajax({
        type: 'POST',
        url: ajaxurl,
        data: {"action": "load-all-filter", cat: cptID },
        success: function(response) {
            jQuery("#category-post-content").html(response);
            return false;
        }
    });
}
jQuery( "a.ajax" ).click(function(e) {
    jQuery("a.ajax").removeClass("current");
    jQuery(this).addClass("current"); //adds class current to the category menu
    var catnumber = jQuery(this).attr('data-term-number');
    cat_ajax_get(catnumber);
    e.preventDefault();
});
jQuery( "a.all-cats" ).click(function(e) {
    jQuery("a.ajax").removeClass("current");
    jQuery(this).addClass("current"); //adds class current to the category menu
    var cptname = jQuery(this).attr('data-cpt-name');
    all_cats_ajax_get(cptname);
    e.preventDefault();
});

//TEAM ajax Members filtering
add_action( 'wp_ajax_nopriv_load-filter', 'prefix_load_cat_posts' );
add_action( 'wp_ajax_load-filter', 'prefix_load_cat_posts' );
function prefix_load_cat_posts () {
    $cat_id = $_POST[ 'cat' ];
    $args = array (
            'tax_query' => array(
                 array(
                    'taxonomy' => 'team_location',
                    'field' => 'term_id',
                    'terms' => array( $cat_id )
                 )
            ),
            'post_type' => 'team-member', // <== this was missing
            'posts_per_page' => 20,
            'order' => 'ASC',
            'orderby'   => 'title',

        );
    global $post;
    $posts = get_posts( $args );
    ob_start ();
    foreach ( $posts as $post ) { 
        setup_postdata($post);
    ?>
    <div class="col-md-6 col-lg-4 space30">
    <div class="project-tile">
        <a href="<?php the_permalink(); ?>"> <?php echo get_the_post_thumbnail( $page->ID, 'large' ); ?></a>
        <div class="project-text">
            <h3 class="posttitle">
                <?php echo get_the_title(); ?>
            </h3>
            <h4>
                <?php the_field('team_title'); ?>
            </h4>
        </div>
    </div> 
    </div> 
   <?php } wp_reset_postdata();
   $response = ob_get_contents();
   ob_end_clean();
   echo $response;
   die(1);
}

//TEAM ajax ALL projects filtering
add_action( 'wp_ajax_load-all-filter', 'prefix_load_all_cat_posts' );
function prefix_load_all_cat_posts () {
    $cat_id = $_POST[ 'cat' ];
    $args = array (
            'post_type' => 'team-member',
            'posts_per_page' => 20,
            'order' => 'ASC',
            'orderby'   => 'ID',
        );
    global $post;
    $posts = get_posts( $args );
    ob_start ();
    foreach ( $posts as $post ) { 
        setup_postdata($post);
    ?>
    <div class="col-md-6 col-lg-4 space30">
    <div class="project-tile ">
        <a href="<?php the_permalink(); ?>"> <?php echo get_the_post_thumbnail( $page->ID, 'large' ); ?></a>
        <div class="project-text">
            <h3 class="posttitle">
                <?php echo get_the_title(); ?>
            </h3>
            <h4>
                <?php the_field('team_title'); ?>
            </h4>
        </div>
    </div> 
    </div> 
   <?php } wp_reset_postdata();
   $response = ob_get_contents();
   ob_end_clean();
   echo $response;
   die(1);
}

4

1 回答 1

0

我认为您在这里获取 ajax URL 的方式:https ://gist.github.com/chadamski/410f9deb4c9d7bfe51beef5720c5991d#file-ajaxcptfilter-txt-L42是错误的。

使用两个选项中的一个。

选项1

在您的标题中添加以下内容:

<script type="text/javascript">
    var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>";
</script>

现在ajaxurl在您的 ajax 请求中使用它。

选项 2

使用脚本本地化。

wp_localize_script( 'FrontEndAjax', 'ajax', array(
    'url' => admin_url( 'admin-ajax.php' )
) );

此处FrontEndAJAX必须替换为编写 ajax 代码的 js 文件的名称。

如果设置正确,您可以获取您的网址:ajax.url

修复操作

我不确定您是在前端运行它还是仅在管理区域运行它。如果它在前端,您需要添加它。

add_action( 'wp_ajax_load-all-filter', 'prefix_load_all_cat_posts' );
add_action( 'wp_ajax_nopriv_load-all-filter', 'prefix_load_all_cat_posts' );

这里:https ://gist.github.com/chadamski/410f9deb4c9d7bfe51beef5720c5991d#file-ajaxcptfilter-txt-L117


参考:

  1. https://codex.wordpress.org/AJAX_in_Plugins
于 2021-06-18T12:42:34.297 回答