2014-12-16 3 views
0

Я использую функцию get_posts() для извлечения партии сообщений из пользовательского типа сообщения, отсортированного по идентификатору, изменения этих сообщений и последующей выборки следующей партии.Wordpress get_posts() fetch next batch posts

У меня есть следующий код:

<?php 
require_once('wp-load.php'); 
$temp_list_of_products_array  = get_posts(array('post_type' => 'sale', 'numberposts' => 10)); 
$temp_list_of_products_array_length = count($temp_list_of_products_array); 

for ($xt = 0; $xt < $temp_list_of_products_array_length; $xt++) { 
    $temp_product_id     = $temp_list_of_products_array[$xt]->ID; 
    $temp_product_untranslated_field = get_post_meta($temp_product_id, 'wpcf-product-details', true); 
    $temp_product_translated_field  = get_post_meta($temp_product_id, 'wpcf-translated-product-details', true); 
    $temp_product_description_language = 'en'; 

    if ($temp_product_translated_field == null) { 
     $temp_product_translated_contents = google_translate_text($temp_product_untranslated_field, $temp_product_description_language); 
     update_post_meta($temp_product_id, 'wpcf-translated-product-details', $temp_product_translated_contents); 
    } 
    echo $temp_product_id; 
} 
?> 

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

Вопрос в том, как получить следующую партию из 10 сообщений без активации пользовательского вызова с разбивкой по страницам?

Благодаря

+0

добавить смещение в функцию get_posts http://codex.wordpress.org/Template_Tags/get_posts –

+0

Я прочитал документацию, но я не уверен, как это работает. Поэтому, если я добавлю 'offset' => 1, означает ли это, что код будет работать с первого сообщения, а затем каждый раз, когда я вызываю свою функцию, загружаются следующие 10 сообщений? – user2028856

+0

Хорошо, я только что добавил «offset» => 1, но сообщения, полученные каждый раз, остаются неизменными при вызове моей функции – user2028856

ответ

0

сначала получить текущую страницу

$paged=($query_vars['paged']!=0 ? $query_vars['paged'] : 1); 

Вычислит значение смещения

$numberposts=10; 
$ofdset=$numberposts* ($paged - 1) ; 

добавить код

$temp_list_of_products_array = get_posts(array('post_type' => 'sale', 'numberposts' => 10 ,'offset'=>$offset)); 
$temp_list_of_products_array_length = count($temp_list_of_products_array); 

for ($xt = 0; $xt < $temp_list_of_products_array_length; $xt++) { 
    $temp_product_id     = $temp_list_of_products_array[$xt]->ID; 
    $temp_product_untranslated_field = get_post_meta($temp_product_id, 'wpcf-product-details', true); 
    $temp_product_translated_field  = get_post_meta($temp_product_id, 'wpcf-translated-product-details', true); 
    $temp_product_description_language = 'en'; 

    if ($temp_product_translated_field == null) { 
     $temp_product_translated_contents = google_translate_text($temp_product_untranslated_field, $temp_product_description_language); 
     update_post_meta($temp_product_id, 'wpcf-translated-product-details', $temp_product_translated_contents); 
    } 
    echo $temp_product_id; 
} 

добавить код постраничного в нижней части цикла проверить это для WordPress пагинацией с get_posts функцией https://wordpress.stackexchange.com/questions/137100/using-pagination-with-get-posts-on-page-type

+0

Когда вы упоминаете «добавить код разбивки на страницы внизу цикла», означает ли это, что это все еще требует пользователя щелкнуть ссылку для разбивки на страницы, чтобы перейти к следующей партии? Мой скрипт на самом деле запускается как cronjob каждые две минуты без ввода пользователем. Будет ли ваше предложение по-прежнему работать для получения следующей партии? Спасибо – user2028856

+0

если вы использовали cronjob каждые две минуты, тогда вам не нужно, чтобы разбиение на страницы только вычисляло смещение в cronjob anp, чтобы передать значение смещения в функции get_posts, это загрузка следующей партии из 10 сообщений –

+0

Спасибо за ответ, но как мне рассчитать смещение в кроне? Я думал, что вы можете ввести время, подобное этому, в cronjob */2 * * * * – user2028856

0

Вы можете просто использовать paged параметр:

$current_page = 1; // <-- Modify this to your needs! 

$temp_list_of_products_array = get_posts( 
    array( 
     'paged'   => $current_page, 
     'post_type'  => 'sale', 
     'posts_per_page' => 10 
    ) 
); 

для пейджинга.

+0

Я просто пробовал это, но я все равно получаю точные сообщения каждый раз, когда я вызываю свою функцию. Мне нужно, чтобы скрипт загружал следующую партию из 10 сообщений каждый раз, когда она вызывается, без ввода пользователем. Это cronjob, который я запускаю каждые две минуты – user2028856

+1

get_posts не имеет параметра paged –

+0

'get_posts()' является простой оболочкой для 'WP_Query()', поэтому ** поддерживает ** входной параметр 'paged' @ankurbhadania – birgire