Ich verbringe den ganzen Tag damit, ein Problem mit einer Kombination aus einer benutzerdefinierten Abfrage und benutzerdefinierten Post-Typen zu lösen. Das ist mein letztes Mittel ...
Die Einstellung
ich ein Plugin geschrieben, die einige benutzerdefinierte Post-Typen zu meinem Wordpress führt. Ich hakte sie in die Abfrage wie folgt, um sie in der Hauptabfrage angezeigt:
function add_cpt_to_query($query) {
*some code...*
// add custom post types to query
if (!(is_admin() || is_post_type_archive() || is_page()) && $query->is_main_query()) {
$query->set('post_type', array_merge(array('post'), $cpt));
}
}
add_action('pre_get_posts','add_cpt_to_query');
In meinem Thema auf der anderen Seite ich Setup Ajax Paginierung wie folgt aus:
function setup_pagination() {
global $wp_query;
$max_pages = $wp_query->max_num_pages;
$current_page = ($wp_query->paged > 1) ? $wp_query->paged : 1;
$ajaxurl = admin_url('admin-ajax.php');
wp_register_script('ajax-pagination', get_template_directory_uri() .'/js/dummy.js', array('jquery'), '', true);
wp_localize_script('ajax-pagination', 'ajaxpagination', array(
'max_pages' => $max_pages,
'current_page' => $current_page,
'ajaxurl' => $ajaxurl,
'query_vars' => $wp_query->query_vars
));
wp_enqueue_script('ajax-pagination');
}
add_action('wp_enqueue_scripts', 'setup_pagination');
function pagination() {
$query = $_POST['query_vars'];
$query['paged'] = $_POST['next_page'];
/*
$query = array(
'paged' => 2,
'post_type' => array('post', 'custom_post_type_1', 'custom_post_type_2')
);
*/
$posts = new WP_Query($query);
$GLOBALS['wp_query'] = $posts;
// Start the loop.
while (have_posts()) : the_post();
?>
*some code...*
<?php endwhile;
die();
}
add_action('wp_ajax_nopriv_ajax_pagination', 'pagination');
add_action('wp_ajax_ajax_pagination', 'pagination');
und das Skript Teil:
$.ajax({
url: ajaxpagination.ajaxurl,
type: 'post',
data: {
action: 'ajax_pagination',
query_vars: ajaxpagination.query_vars,
next_page: parseInt(ajaxpagination.current_page) + 1
}
});
Das Problem
Wenn ich das query_vars-Array übergebe, bekomme ich von $ wp_query mit dem geänderten 'paged' -Wert zurück nach WP_QUERY, es wird der falsche Satz von Posts zurückgegeben. Es sieht so aus, dass WP_QUERY die cpts in der Schleife nicht berücksichtigt. Obwohl diese cpts im "post_type" des query_vars-Arrays erwähnt und somit an das neue WP_QUERY übergeben werden.
Wenn ich manuell "post_type" festlegen und dieses Argument nur übergeben, funktioniert es wie vorgesehen. Der Aspekt, der mir in den Sinn kommt, ist, dass die resultierenden query_vars, die im Ajax-Aufruf von WP_QUERY verwendet werden, genau gleich sind, aber nur wenn ich 'post_type' manuell setze, funktioniert die Paginierung wie sie sollte.
Ich weiß nicht, ob das eine etwas verständliche Erklärung war, aber ich bin dankbar für jede Idee, die mir helfen könnte. Großer THX!
Vergewissern Sie sich, dass Sie '$ posts-> have_posts()' und '$ posts-> the_post()' und Nach dem Aufruf der Schleife 'wp_reset_postdata()' – kindisch
[http://stackoverflow.com/questions/33431615/wordpress-category-post-ajax-pagination/36802388#36802388] überprüfen Sie dies könnte Ihnen helfen! –