搜索-AJAX-使用分页更改查询参数

时间:2014-03-31 作者:Howdy_McGee

Too Long ; Didn\'t Read

在使用ajax创建查询时,如何使分页工作?

我正在创建一个功能性搜索页面,允许用户过滤每页的帖子数量。我不太明白如何创建它,以便分页功能正确,希望有人能向我解释一下。我知道,通过在PHP ajax操作中创建一个新查询,我可以创建新的分页,并且不会改变正常的WP\\U查询,因此我需要使用ajax创建分页功能,但我不确定如何将其连接到某个ajax自定义查询。

function implement_ajax() {

    $ppp = 10;
    if(isset($_GET[\'ppp\']))
        $ppp = $_GET[\'ppp\'];

    $search = $_GET[\'s\'];           // Acquired and sent via ajax
    $paged = 1;
    if(isset($_GET[\'paged\']))
        $paged = $_GET[\'paged\'];

    $temp = new WP_Query(array(\'s\' => $search, \'posts_per_page\' => $ppp));

    $numPosts = $temp->post_count;
    $foundPosts = $temp->found_posts;
    $lastPage = $temp->max_num_pages;

    ob_start();
    if($temp->have_posts()) :
        $i = 0; 
    ?>
        <?php if($temp->max_num_pages > 1) : ?>
            <div class="pagination">
                <?php 
                    $big = 999999999;
                    echo paginate_links(array(\'base\' => \'/\', \'format\' => \'?paged=%#%\', \'current\' => max( 1, get_query_var(\'paged\') ), \'total\' => $temp->max_num_pages)); 
                ?>
                <div class="clear"></div>
            </div> <!-- class="pagination" -->
        <?php endif; ?>

        <div id="postContainer">
            <?php while($temp->have_posts()) : 
                    $temp->the_post(); 
                    $i++; 
            ?>

                <div class="custom-post<?php echo ($i%2 == 0) ? \' even\' : \'\'; echo ($i == $numPosts) ? \' last\' : \'\'; echo ($i == 1) ? \' first\' : \'\'; ?>">
                    <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
                    <?php the_excerpt(); ?>
                </div> <!-- class="custom-post" -->

            <?php endwhile; ?>
        </div> <!-- id="postContainer" -->

    <?php else : ?>
        <div id="postContainer">
            <div id="content">
                <p>No articles found.</p>
                <p><a href="<?php echo home_url(); ?>">Return Home</a></p>  
            </div> <!-- id="content" -->
        </div> <!-- id="postContainer" -->
    <?php endif;

    $htmlContent = ob_get_clean();
    echo $htmlContent;
    exit;
}
add_action(\'wp_ajax_nopriv_implement_ajax\', \'implement_ajax\');
add_action(\'wp_ajax_implement_ajax\', \'implement_ajax\');
上面返回了正确的查询-但分页被破坏,因为我不确定如何设置base 参数我试过了(\'/?s=\'.$search.\'?paged=\'.$paged)/ 还有其他一些让我一事无成的。如果我在法典中使用“基本示例”:str_replace( $big, \'%#%\', esc_url( get_pagenum_link( $big ) ) ) paginate\\u链接返回:

/wp-admin/admin-ajax.php?action=implement_ajax&ppp=1&s=web&paged=2

返回正确的帖子,减去页眉、页脚和样式。

我试图复制通用汽车在this question 使用本地化脚本,但无法通过$args = (array) filter_var(INPUT_POST, \'query\'); 因为参数2应为整数。我试图将我的$\\u POST[\'query\']转换为数组,但未能实现。

Relevant File Pastebins:

  1. Search Page
  2. Relevant Functions
  3. Ajax Jquery
警告-那里可能有一些遗迹,我一直在不断地评论,试图让它发挥作用。

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

我想这就是你想要的。base 通过设置home_url(), 格式为page/%#%/, 通过添加搜索查询参数add_args 如果存在:

$args = array(
    \'base\' => home_url( \'/%_%\' ),
    \'format\' => \'page/%#%/\',
    \'current\' => max( 1, get_query_var(\'paged\') ),
    \'total\' => $temp->max_num_pages,
);

if( isset($_GET[\'s\']) ){
    $args[\'add_args\'] = array(
        \'s\' => $_GET[\'s\'] // your search query passed via your ajax function
    );
}

echo paginate_links( $args );

结束

相关推荐

如果通过admin-ajax.php的回调函数调用IS_SIGNAL(),则不起作用

在我的single.php 我有一些这样的代码。。。if(is_singular(\'post\')) { echo \'Blog\'; } else { echo \'CPT\'; } 如果我接近single.php 通过使用从博客或CPT索引页the_permalink(), 此条件正常工作。当我打开单个博客帖子时,它会显示“Blog”,当我打开单个CPT时,它会显示“CPT”。现在的问题是如果方法single.php 通过的某个回调函数admi