Навигация Следующий/Предыдущий для Произвольного Типа Записей?

19 окт. 2011 г., 22:25:20
Просмотры: 64K
Голосов: 14

У меня есть произвольный тип записей (custom post type) под названием portfolio. Мне нужны ссылки предыдущий/следующий БЕЗ использования плагина. Есть ли у кого-нибудь решение?

Пример записи: http://themeforward.com/demo2/archives/portfolio/boat

<?php get_header(); ?>

<!-- Начало обертки -->
<div class="clear">
<div id="full_container">
<div id="content2">
<div id="content">

<!-- Получаем записи -->
<?php if (have_posts()) : ?><?php while (have_posts()) : the_post(); ?>

<!-- Заголовок записи -->
<h1>
    <?php the_title(); ?>
</h1>

<!-- Запись -->
<?php the_content(); ?>

<!-- Метки -->
<h3 class="tags">
    <?php the_tags('Метки ',' / ','<br />'); ?>
</h3>

<!-- Конец обертки -->
</div>

<!-- Следующие/Предыдущие записи -->
<div class="mp_archive2">
<div id="more_posts">
    <div class="oe">
        <?php previous_post_link('%link', '« Предыдущая запись', TRUE); ?>
    </div>

    <div class="re">
        <?php next_post_link('%link', 'Следующая запись »', TRUE); ?>
    </div>
</div>
</div>

<?php endwhile; else: ?>
<p>Подходящие записи не найдены.</p>
<?php endif; ?>
</div>
</div>
</div>
</div>
<?php get_footer(); ?>
4
Комментарии

Почему такое отвращение к плагинам?

chrisguitarguy chrisguitarguy
19 окт. 2011 г. 23:06:07

Потому что если это плагин, он не встроен в тему.

AndrettiMilas AndrettiMilas
19 окт. 2011 г. 23:26:16

@Lucas Wynne Если вы хотите встроить его, скопируйте/вставьте код плагина в файл functions.php вашей темы.

kaiser kaiser
19 окт. 2011 г. 23:50:10

@kaiser при условии, конечно, что ты соблюдаешь условия лицензии и интеллектуальной собственности, что не так просто, если разрабатываешь тему для продажи.

Phill Healey Phill Healey
24 июл. 2016 г. 14:20:46
Все ответы на вопрос 3
2
21
<?php
$prev_post = get_previous_post();
if($prev_post) {
   $prev_title = strip_tags(str_replace('"', '', $prev_post->post_title));
   echo "\t" . '<a rel="prev" href="' . get_permalink($prev_post->ID) . '" title="' . $prev_title. '" class=" ">&laquo; Предыдущая запись<br /><strong>&quot;'. $prev_title . '&quot;</strong></a>' . "\n";
}

$next_post = get_next_post();
if($next_post) {
   $next_title = strip_tags(str_replace('"', '', $next_post->post_title));
   echo "\t" . '<a rel="next" href="' . get_permalink($next_post->ID) . '" title="' . $next_title. '" class=" ">Следующая запись &raquo;<br /><strong>&quot;'. $next_title . '&quot;</strong></a>' . "\n";
}
?>
20 нояб. 2013 г. 12:05:11
Комментарии

Пожалуйста, отформатируйте ваши коды/ответы и добавьте к ним пояснение.

Maruti Mohanty Maruti Mohanty
20 нояб. 2013 г. 12:35:55

Можно ли как-то ограничить это таксономией, в которой находится CPT?

gil hamer gil hamer
8 апр. 2014 г. 12:28:20
8
15

Если вам нужны ссылки "следующая/предыдущая" для одиночных записей, есть встроенные функции next_post_link и соответствующая previous_post_link, обе из которых следует использовать внутри цикла.

Для архивов используйте next_posts_link и previous_posts_link.

Все эти функции отлично работают с пользовательскими типами записей.

19 окт. 2011 г. 23:12:33
Комментарии

Они не работают в моей теме.

AndrettiMilas AndrettiMilas
19 окт. 2011 г. 23:26:05

Хорошо. Без просмотра вашего кода сложно сказать почему. Есть ли какие-либо ошибки или предупреждения PHP? У вас есть несколько записей, для которых функции должны получать ссылки?

chrisguitarguy chrisguitarguy
19 окт. 2011 г. 23:46:52

Я обновил свой вопрос выше.

AndrettiMilas AndrettiMilas
19 окт. 2011 г. 23:57:03

Попробуйте с третьим аргументом TRUE и сообщите нам.

chrisguitarguy chrisguitarguy
20 окт. 2011 г. 00:11:28

Третий аргумент TRUE?

AndrettiMilas AndrettiMilas
20 окт. 2011 г. 00:13:18

Используйте это <?php next_post_link('%link', 'Next post »'); ?> и <?php next_post_link('%link', 'Next post »'); ?>

chrisguitarguy chrisguitarguy
20 окт. 2011 г. 00:16:29

Это работает с пользовательскими типами записей, но как насчёт той же таксономии текущей записи?

jepser jepser
4 окт. 2012 г. 23:08:49

@jepser (Прихожу с опозданием на вечеринку) Вам нужно указать таксономию для использования в качестве 5-го аргумента. Если вы передадите только первые 3 аргумента и включите третий, чтобы оставаться в той же таксономии, скорее всего, это не сработает, так как таксономия по умолчанию — это category (которой, вероятно, нет у вашего CPT). Смотрите связанные статьи кодекса в ответе.

Evan Mattson Evan Mattson
7 февр. 2014 г. 21:39:25
Показать остальные 3 комментариев
1

Вы можете использовать функцию get_adjacent_post для получения объекта следующей или предыдущей записи в цикле.

Вы можете изменить третий параметр на true или false, чтобы получить следующий или предыдущий объект записи. get_adjacent_post( false, '', true);

С этими знаниями мы можем использовать функцию get_the_permalink для получения URL записей и создания собственных ссылок, без необходимости удалять лишние элементы, которые WordPress добавляет при других методах.

Этот метод особенно полезен, если вы хотите самостоятельно стилизовать гиперссылки и иметь полный контроль над их форматированием.

<?php
    $next_post = get_adjacent_post( false, '', false);
    $next_post_url = get_the_permalink($next_post);

    $previous_post = get_adjacent_post( false, '', true);
    $previous_post_url = get_the_permalink($previous_post);
?>

<a href="<?php echo $next_post_url;?>">Следующая запись</a>
<a href="<?php echo $previous_post_url;?>">Предыдущая запись</a>
3 февр. 2022 г. 13:40:09
Комментарии

Кроме того, если вам нужен бесконечный цикл постов, вы можете использовать это: https://wplancer.com/infinite-next-and-previous-post-looping-in-wordpress/

SunnyRed SunnyRed
29 авг. 2022 г. 19:55:52