[оригинал вопроса ниже]
Sql-запрос принял следующий вид (спасибо, @Mike):
global $wpdb;
$myquery = "SELECT wp_posts.ID, wp_posts.post_author, wp_posts.post_date, wp_posts.post_date_gmt, wp_posts.post_content, wp_posts.post_title, wp_posts.post_excerpt, wp_posts.post_status, wp_posts.comment_status, wp_posts.ping_status, wp_posts.post_password, wp_posts.post_name, wp_posts.to_ping, wp_posts.pinged, wp_posts.post_modified, wp_posts.post_modified_gmt, wp_posts.post_content_filtered, wp_posts.post_parent, wp_posts.guid, wp_posts.menu_order, wp_posts.post_type, wp_posts.post_mime_type, wp_posts.comment_count, coalesce(MAX(wp_comments.comment_date),wp_posts.post_date) AS com_date
FROM wp_posts LEFT OUTER JOIN wp_comments
ON wp_posts.ID = wp_comments.comment_post_id
WHERE post_status = 'publish' AND post_type = 'post'
GROUP BY ID
ORDER BY com_date DESC";
Таким образом, вся сортировка происходит только в нём. Затем я подсчитываю общее количество постов, количество постов на одной странице, текущую страницу и стартовый номер записи на странице.
$total_query = "SELECT COUNT(1) FROM (${myquery}) AS combined_table";
$totalposts = $wpdb->get_var( $total_query );
$items_per_page = 2;
$currentpage = isset( $_GET['cpage'] ) ? abs( (int) $_GET['cpage'] ) : 1;
$offset = ( $page * $items_per_page ) - $items_per_page;
И добавляю в запрос LIMIT для пагинации:
$myresult = $wpdb->get_results( $myquery . " LIMIT ${offset}, ${items_per_page}");
Далее я использую paginate_links(), и она работает! Но не отображаются комментарии на всех страницах, кроме первой. В чём ошибка?
// всё вышеописанное...
// пагинация
echo paginate_links( array(
'base' => add_query_arg( 'cpage', '%#%' ),
'format' => '',
'prev_text' => __('«'),
'next_text' => __('»'),
'total' => ceil($totalposts / $items_per_page),
'current' => $currentpage
));
// вывод постов
if($myresult) {
foreach ($myresult as $post) {
setup_postdata($post);
// моя сортировка по категориям (думаю, так делать нехорошо)
$cats = get_the_category();
if($cats) {
foreach ($cats as $cat) {
if ($cat->cat_ID == 1) {
// ... заголовки, контент и др. информация о постах
break;
}
}
}
}
wp_reset_postdata();
}
Оригинал вопроса.
Имеется sql-запрос на вывод постов (Wordpress):
global $wpdb;
$myquery = "SELECT wp_posts.ID, wp_posts.post_author, wp_posts.post_date, wp_posts.post_date_gmt, wp_posts.post_content, wp_posts.post_title, wp_posts.post_excerpt, wp_posts.post_status, wp_posts.comment_status, wp_posts.ping_status, wp_posts.post_password, wp_posts.post_name, wp_posts.to_ping, wp_posts.pinged, wp_posts.post_modified, wp_posts.post_modified_gmt, wp_posts.post_content_filtered, wp_posts.post_parent, wp_posts.guid, wp_posts.menu_order, wp_posts.post_type, wp_posts.post_mime_type, wp_posts.comment_count, MAX(wp_comments.comment_date) AS com_date
FROM wp_posts LEFT OUTER JOIN wp_comments
ON wp_posts.ID = wp_comments.comment_post_id
WHERE post_status = 'publish' AND post_type = 'post'
GROUP BY ID";
$myresult = $wpdb->get_results($myquery);
Полученный результат (массив) которого потом немного редактируется, а именно:
p.s. Может быть последние 2 действия можно было организовать в одном sql-запросе (знаний не хватает)
// 1.
if ($myresult) {
foreach ($myresult as $str) {
if ($str->com_date) {
} else {
$str->com_date = $str->post_date;
}
}
}
// 2.
function cmp($a, $b) {
return strcmp($b->com_date, $a->com_date);
}
usort($myresult,"cmp");
Далее идёт вывод постов:
if($myresult) {
foreach ($myresult as $post) {
setup_postdata($post);
the_author();
the_title();
// ... другая информация
// а здесь нужно организовать пагинацию (!)
Далее нужно организовать пагинацию. При этом сортировка по последнему комментарию не должна слететь. Как мне это сделать?
p.s. Пробовал опираться на следующее решение http://wordpress.stackexchange.com/questions/53194/wordpress-paginate-wpdb-get-results/#53195 Но тогда не отображаются комментарии на страницах пагинации (отображаются только на главной) и сбивается сортировка постов (получается в обратном порядке).
Здравствуйте, понадобилось сделать превью вордовского файла в виде картинки, что б еще сохранялось форматирование текста
Здравствуйте, уважаемые пользователи стакаОшибка состоит с вытягиванием категорий с БД