0

このGetting Loopyチュートリアルに取り組んで、Packery.js レイアウトに投稿を追加しましたが、ホームページではうまく機能しますが、アーカイブ (archive.php) ページに使用しようとすると、すべての投稿が引き続き読み込まれます。そのカテゴリ(または検索クエリなど)に固有の投稿ではありません。WordPressのarchive.phpループがAJAXでトリガーしているときに本質的に持っているように見えるフィルタリングを保持するにはどうすればよいですか?

<?php while (have_posts()) : the_post();?>現在、 archive.php ページのメイン ループとして、最初の 12 のカテゴリ投稿を正しく呼び出している標準があります。次に、2 番目のループを使用して追加の投稿を追加しようとしました。前に言ったように、これは (カテゴリだけでなく) すべての投稿を呼び出します。私の現在の試みは、2 番目のループでカテゴリを特定することでしたが、間違っているようです。関連する現在のコードは以下のとおりです (変更されていないコードは上記のチュートリアル リンクにあります)。何か案は?ありがとう!

フッターの AJAX トリガー スクリプト:

var pager = 1;
var archive_load_posts = function(){  
    $.ajax({  
        type       : "GET",  
        data       : {pageNumber: pager},  
        dataType   : "html",  
        url        : "http://tay.is/designing/belmontvision/wp-content/themes/yamidoo/archive-more-loop.php",  
        beforeSend : function(){},  
        success    : function(data){  
            var $data = $(data);  
            $container.append( $data ) .packery( 'appended', $data );
            heightcalc();
            $container.packery();
        }
    });
};

$('.archive-load-more').click( function() {
    archive_load_posts();
    pager++;
});

archive-more-loop.php のベース:

<?php   require_once('../../../wp-load.php');   
        $page = (isset($_GET['pageNumber'])) ? $_GET['pageNumber'] : 0;
        $category = get_queried_object_id();

        query_posts(array(  
            'paged' => $page,
            'cat' => $category
        ));  

        while (have_posts()) : the_post(); ?>
<?php endwhile; ?>
4

1 に答える 1

0

AJAX リクエストは、サーバーへの新しいリクエストを表します。元のページの「内部」では実行されません。get_queried_object()うまくいかない、またはせいぜい元のページとは異なるものが返されるようなものです。

AJAX ハンドラー スクリプトに情報を明示的に渡す必要があります。使用しているため、このGET行にクエリ変数を追加する必要があります。その他の情報を入力して、それを渡します。"http://tay.is/designing/belmontvision/wp-content/themes/yamidoo/archive-more-loop.php""http://tay.is/designing/belmontvision/wp-content/themes/yamidoo/archive-more-loop.php?category=123"archive_load_posts

これをフッターに直接印刷していて、そのように見える場合は、次のようにするとうまくいく可能性があります

$category = get_queried_object_id(); ?>
<script type="text/javascript">

    var archive_load_posts = function(){  
        $.ajax({  
            type       : "GET",  
            data       : {pageNumber: pager},  
            dataType   : "html",  
            url        : "http://tay.is/designing/belmontvision/wp-content/themes/yamidoo/archive-more-loop.php?category=<?php echo $category ?>",  
            beforeSend : function(){},  
            success    : function(data){  
                var $data = $(data);  
                $container.append( $data ) .packery( 'appended', $data );
                heightcalc();
                $container.packery();
            }
        });

};
</script><?php

問題:

  1. WordPress は jQuery を「noConflict」モードで読み込みます。$投稿されていないコードがそれを修正する可能性がありますが、エイリアスは機能しません。
  2. あなたはWordPress AJAX APIを完全に無視しており、require_once('../../../wp-load.php');. これを適切に行う方法は、スクリプト を登録してキューwp_localize_scriptに入れ、変数をページに書き込むために使用することです。それがどのように見えるかを理解するには、wordpress.stackexchange.com でこの回答(私のもの) を参照してください。
于 2014-02-11T05:25:27.133 に答える