У меня есть собственная строка SQL, чтобы выбрать сообщения пользовательского типа с определенным предложением WHERE. Я использовал смещение и лимит для возврата соответствующих сообщений в зависимости от отображаемой страницы. Это работает нормально.
Теперь я хотел бы, чтобы previous_posts_link()
и next_posts_link()
функции работали. Они оба называются из get_posts_nav_link
которых использует global $wp_query
.
Есть ли способ, которым я могу переназначить global $wp_query
мою строку SQL или $wpdb->get_results
результаты или что-нибудь еще? Так что функции native previous_posts_link()
и next_posts_link()
WP будут работать.
Если нет, как я могу воспроизвести функции ссылки на предыдущий и следующий пост?
Буду очень признателен за любую помощь и совет! Я полностью застрял с этим.
Спасибо :)
ПРИМЕЧАНИЕ: я только что заметил, что previous_posts_link()
работает правильно на всех страницах, но no idea why
и в этом случае, почему next_posts_link
не работает: S
Вот код:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$post_per_page = intval(get_query_var('posts_per_page'));
$offset = ($paged - 1)*$post_per_page;
$sql = "
SELECT SQL_CALC_FOUND_ROWS wp_posts.*, wp_postmeta.*
FROM wp_posts
INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id)
WHERE 1=1
AND wp_posts.post_type = 'movie'
AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')
AND ((wp_postmeta.meta_key = '_expiry_date' AND CAST(wp_postmeta.meta_value AS DATE) >= '".$current_date."')
OR (mt1.meta_key = '_expiry_date' AND CAST(mt1.meta_value AS CHAR) = ''))
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC
LIMIT ".$offset.", ".$post_per_page;
$movies_all_current = $wpdb->get_results( $sql, OBJECT);
if($movies_all_current) {
global $post;
//loop
foreach( $movies_all_current as $key=>$post ) {
setup_postdata($post);
//display each post
//...
} //end foreach ?>
//navigation
<div class="navigation">
<div class="previous panel"><?php previous_posts_link('« newer') ?></div>
<div class="next panel"><?php next_posts_link('older »') ?></div>
</div>
}
источник
Взгляните на пользовательские запросы, которые позволяют вам изменять вызов wp_query многими интересными и полезными способами и помещать результаты обратно в глобальный объект запроса.
источник
Расширяя ответ Ану. Вместо того чтобы полагаться на свой пользовательский sql-запрос, вы можете использовать класс WP_Query и позволить WordPress обрабатывать все тяжелые операции SQL. Это наверняка решит вашу проблему с навигацией.
Пример запроса для типа записи фильма в вашем _expiry_date meta_key:
источник
WP_Query
класс, так как мне нужно создать свой собственный SQL. Я попал туда в конце, смотрите мой ответ, если интересно :)Шаблон:
источник
query_posts
а другой сWP_Query