2016-05-09 2 views
0

Я трачу весь этот день, пытаясь выяснить проблему с комбинацией пользовательского запроса и настраиваемых типов сообщений. Это мое последнее средство ...

Заходящего

Я написал плагин, который вводит некоторые пользовательские типы почтовых мое WordPress. Для того, чтобы отобразить их в главном запросе я подключил их в запрос, как это:

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'); 

В моей теме с другой стороны, я установка АЯКС пагинацией как это:

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'); 

и часть сценария:

$.ajax({ 
      url: ajaxpagination.ajaxurl, 
      type: 'post', 
      data: { 
       action:   'ajax_pagination', 
       query_vars:  ajaxpagination.query_vars, 
       next_page:  parseInt(ajaxpagination.current_page) + 1 
      } 
     }); 

проблема

Если я передаю массив query_vars, я получаю из $ wp_query с измененным значением «paged» обратно в WP_QUERY, он возвращает неправильный набор сообщений. Похоже, WP_QUERY не учитывает cpts в цикле. Хотя эти cpts упоминаются в «post_type» массива query_vars и тем самым передаются вместе с новым WP_QUERY.

Когда я вручную устанавливаю 'post_type' и передаю этот аргумент, он работает по назначению. Аспект, который вызывает у меня мысли, заключается в том, что полученные query_vars, используемые в вызове ajax для WP_QUERY, точно такие же, но только когда я вручную устанавливаю post_type, разбиение на страницы работает так, как должно.

Я не знаю, было ли это несколько понятное объяснение, но я благодарен за каждую идею, которая могла бы помочь мне. Большой THX!

+0

Убедитесь, что, что вы используете '$ posts-> have_posts()' и '$ posts-> the_post()' и после вызова цикла 'wp_reset_postdata()' – kindisch

+0

[http://stackoverflow.com/questions/33431615/wordpress-category-post-ajax-pagination/36802388#36802388] проверьте, что это может вам помочь! –

ответ

0

Хорошо ... Я понял это сейчас.

Я допустил ошибку в wp_localize_script(). Query_vars должен быть json-строкой, я, с другой стороны, просто передал сам массив. Мой код, указанный выше, должен быть изменен в двух строках:

function mk_setup_pagination() { 

    ... 

    wp_localize_script('ajax-pagination', 'ajaxpagination', array(
     ... 
     'query_vars'  => json_encode($wp_query->query_vars) <- convert to json-string 
    )); 

    ... 
} 

function mk_pagination() { 

    $query = json_decode(stripslashes($_POST['query_vars']) , true); <- convert json-string to array 

... 

Работает как очарование. :)

кстати: код основан на учебник по wpmudev.org: Loading WordPress Posts Dynamically With AJAX

Смежные вопросы