Я использую get_posts
и get_comments
создаю несколько циклов на странице, на которых у меня возникают проблемы с нумерацией страниц.
У меня есть опция глобальных сообщений на странице (Настройки> Чтение), установленная на 10, и это, похоже, меняет проблему. На данный момент я могу легко добраться до страницы 2 — http://dev.ashfame.com/author/ashfame/page/2/, но страница 3 возвращает 404.
Если я уменьшу глобальное значение, у меня будет больше страниц с разбивкой на страницы, но не все (меньшее количество, чем должно быть).
Обновление: я только что попытался установить свою пользовательскую настройку как 2 (и глобальную тоже), и WordPress должен разбивать на страницы до страницы 4 (у меня есть 7 элементов для отображения), но теперь это так, но также страницы 5 и 6. 7 дает 404. Почему? Как мне решить эту проблему сейчас?
Прогресс: @t31os помог мне понять, что это запрос WP по умолчанию на странице, который настраивает нумерацию страниц для этой страницы. Теперь я могу придумать один способ убить WP-запрос по умолчанию на этой странице (но как?), а затем как мне дальше разбить страницу author.php на страницы? Или есть другой способ сделать это?
Текущий код:
<?php
$author_details = $wp_query->get_queried_object();
// Posts Per Page option
// $ppp = get_option('posts_per_page');
$ppp = 1; //custom setting, if you want to obey the global setting here, comment this line and uncomment the above line
if (!is_paged()) {
$custom_offset = 0;
} else {
$custom_offset = $ppp*($paged-1);
}
echo '<h1>Author ID : '.$author_details->ID.', Page : '.$paged.', Custom Offset : '.$custom_offset.'</h1>';
?>
<h2>Articles</h2>
<?php
$args = array(
'numberposts' => $ppp,
'offset' => $custom_offset,
'category' => 7,
'author' => $author_details->ID
);
$posts_data = get_posts( $args );
// print_r($posts_data);
if ( count( $posts_data ) > 0 ) {
echo '<ul>';
foreach ( $posts_data as $post ) {
echo '<li><a href="'.get_permalink( $post->ID ).'">'.$post->post_title.'</a></li>';
}
echo '</ul>';
} else {
echo '<p>No articles by this user</p>';
}
?>
<h2>Journals</h2>
<?php
$args = array(
'numberposts' => $ppp,
'offset' => $custom_offset,
'category' => 6,
'author' => $author_details->ID
);
$posts_data = get_posts( $args );
// print_r($posts_data);
if ( count( $posts_data ) > 0 ) {
echo '<ul>';
foreach ( $posts_data as $post ) {
echo '<li><a href="'.get_permalink( $post->ID ).'">'.$post->post_title.'</a></li>';
}
echo '</ul>';
} else {
echo '<p>No journals by this user</p>';
}
?>
<h2>Questions</h2>
<?php
$args = array(
'numberposts' => $ppp,
'offset' => $custom_offset,
'category' => 3, // parent category ID is enough
'author' => $author_details->ID
);
$posts_data = get_posts( $args );
// print_r($posts_data);
if ( count( $posts_data ) > 0 ) {
echo '<ul>';
foreach ( $posts_data as $post ) {
$category_array = get_the_category( $post->ID );
$category_name = $category_array[0]->name;
$category_permalink = get_category_link( $category_array[0]->term_id );
echo '<li><a href="'.get_permalink( $post->ID ).'">'.$post->post_title.'</a>
<br />In: <a href="'.$category_permalink.'">'.$category_name.'</a><br />'.get_comments_number( $post->ID ).' Answers</li>';
}
echo '</ul>';
} else {
echo '<p>No questions by this user</p>';
}
?>
<h2>Answers</h2>
<?php
$args = array(
'user_id' => $author_details->ID,
'number' => $ppp,
'offset' => $custom_offset,
'status' => 'approve'
);
$answers_list = get_comments( $args );
// print_r($answers_list);
if ( count( $answers_list ) > 0 ) {
$date_format = get_option( 'date_format' );
echo '<ul>';
foreach ( $answers_list as $answer ) {
echo '<li>Answer: '.substr( $answer->comment_content, 0, 20 ).'..<br />'.date( $date_format, strtotime( $answer->comment_date ) ).'<br />Question: <a href="'.get_permalink( $answer->comment_post_ID ).'">'.get_the_title( $answer->comment_post_ID ).'</a></li>';
}
echo '</ul>';
} else {
echo '<p>No answers by this user</p>';
}
?>
где код, который печатает нумерацию страниц? И что вы пытаетесь разбить на страницы статей? журналы? вопросы? отвечать? все они? и насколько я вижу, вы должны использовать
wp_reset_postdata();
после каждого цикла foreach.@Bainternet На данный момент я не распечатываю ссылки на страницы, а просто напрямую изменяю адресную строку. Есть ли простой способ? Кроме того, я не использую
setup_postdata()
, я напрямую повторяю результатget_posts()
. Да, я пронумерую их все. Пожалуйста, взгляните на один раздел кода, другие похожи.Установите
posts_per_page
желаемое значение, продолжайте делать то, что вы делаете со смещением, но явно установитеpaged
на1
.. и посмотрите, правильно ли все будет вести себя.@ t31os, где
paged
именно я должен установить?Внутри вашего
$args
массива вместе с другими значениями. 🙂Пока мы не убиваем ни одного котенка, взламывая какой-либо файл ядра, у меня это работает 😉 Это прекрасно работает, как я и хочу. Если есть шанс, я могу установить пустые страницы на 404, просто нужно знать место (возможно, только ГЛОБАЛЬНЫЕ?), если это возможно. Я могу получить доступ к любой странице прямо сейчас 🙂
хорошо, неважно, я проверил некоторый код, и он будет более сложным с дополнительными запросами. Но есть ли у вас какие-либо предложения по созданию ссылок с разбивкой на страницы? Я имею в виду, что с текущим кодом я не могу знать, осталось ли что-то дальше, чтобы я мог создать ссылку на следующую страницу или нет. Мысли?
Рассматривали ли вы просто использование Ajax для получения сообщений и использование ссылок prev/next для каждого ajaxified набора сообщений? Ответ ajax может довольно легко вернуть сообщение «Нет больше сообщений» (и позволит избежать необходимости запросов поиска для подсчета сообщений, которые есть у автора в определенной категории).
t31os говорит: [См. историю редактирования для предыдущего кода и комментариев]
Использование Ajax для разбиения ваших запросов на страницы
Я собрал некоторый код, который будет получать ваши сообщения и комментарии через ajax, используя простую навигацию «предыдущий/следующий» через ajax.
1) Замените весь код, который вы разместили в своем author.php, следующим.
2) Создайте файл Javascript в каталоге вашей темы с именем
authorposts.js
и поместите в этот файл следующий код.3) Скопируйте следующий код в файл functions.php вашей темы.
4) Запустите страницу автора и посмотрите, как выглядят результаты, и проверьте, работает ли мой код для вас.
Как это выглядит локально с тестовыми данными.
Нажмите, чтобы просмотреть увеличенную версию, уменьшенную для ответа
Живая демонстрация кода в действии:** (тестовый сайт)
http://t31os.onatha.com/author/t31os/
5) Оставьте отзыв.. 🙂
Надеюсь, это поможет…