在前端,我有一个带有AJAX
“加载更多”按钮。存档页的循环按以下顺序排序date
和ASC
. 我在pre_get_posts
作用
内部pre_get_posts
我使用的函数defined(\'DOING_AJAX\') && DOING_AJAX
检测何时有AJAX调用并应用订单过滤器。
此外,如果是自定义post类型归档页面“workshop”,我想添加到条件语句中。不幸的是,它不起作用。
这个pre_get_posts
功能:
add_action(\'pre_get_posts\', \'ajax_filter_posts\');
add_filter(\'ajax_pre_get_posts\', \'ajax_filter_posts\');
function ajax_filter_posts($query) {
if ( is_post_type_archive(\'workshop\') && defined(\'DOING_AJAX\') && DOING_AJAX ) {
$query->set( \'orderby\', \'date\' );
$query->set( \'order\', \'ASC\' );
$query->set( \'suppress_filters\', true );
}
return $query;
}
AJAX加载更多按钮的代码:
function mysite_loadmore_ajax_handler_workshop(){
$args = json_decode( stripslashes( $_POST[\'query\'] ), true );
$args[\'paged\'] = $_POST[\'page\'] + 1;
$args[\'post_type\'] = \'workshop\';
$args[\'post_status\'] = \'publish\';
$args[\'posts_per_page\'] = 10;
$query_ajax = apply_filters(\'ajax_pre_get_posts\', (new WP_Query($args)));
if ( $query_ajax->have_posts() ) : while ( $query_ajax->have_posts() ) : $query_ajax->the_post();
get_template_part( \'template-parts/content\', \'archive-workshop\' );
endwhile;
endif;
die;
}
add_action(\'wp_ajax_loadworkshop\', \'mysite_loadmore_ajax_handler_workshop\'); // wp_ajax_{action}
add_action(\'wp_ajax_nopriv_loadworkshop\', \'mysite_loadmore_ajax_handler_workshop\'); // wp_ajax_nopriv_{action}
任何帮助都将不胜感激,谢谢。