Существует много плагинов для внутренней перелинковки, но иногда использовать их нецелесообразно т.к. они потребляют много ресурсов и не всегда гибко настраиваются, к счастью существует способ создать внутреннюю перелинковку без использования плагинов! Благодаря этому способу Вы можете вывести предыдущие x-записей из рубрики где опубликован пост.
Чтобы сделать такую перелинковку Вам нужно добавить следующий код в файл single.php (в папке Вашей темы) в то место где Вы хотите вывести "Предыдущие записи":
<?php function show_previous_posts_from_category ($the_post_id, $the_category_id = 0, $post_num) { $num = 0; global $wpdb; $sql = "SELECT wposts.* FROM $wpdb->posts wposts LEFT JOIN $wpdb->term_relationships ON (wposts.ID = $wpdb->term_relationships.object_id) LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) WHERE $wpdb->term_taxonomy.taxonomy = 'category' AND $wpdb->term_taxonomy.term_id = '$the_category_id' AND wposts.post_status = 'publish' AND wposts.post_type = 'post' AND wposts.ID < '$the_post_id' ORDER BY wposts.ID DESC LIMIT $post_num"; $result = $wpdb->get_results($sql, OBJECT); global $post; ?> <ul> <?php foreach ($result as $post) { setup_postdata($post); ?> <li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></li> <?php $num++; $save_ids[] = $post->ID; } if ( $num < $post_num || !$result ) { $need_more = $post_num-$num; $save_ids[] = $the_post_id; $save_ids = join (',', $save_ids); $more_posts = get_posts("numberposts=$need_more&category=$the_category_id&exclude=$save_ids"); foreach ($more_posts as $post){ setup_postdata($post); ?> <li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></li> <?php } } ?> </ul> <?php } ?> <?php $the_cat = get_the_category(); $the_cat_id = $the_cat[0]->cat_ID; show_previous_posts_from_category($post->ID, $the_cat_id, 5); wp_reset_query(); ?>
В 51 строке изменяется количество выводимых постов, по умолчанию выводится 5 предыдущих постов.
По мимо того что этот способ использует намного меньше ресурсов чем аналогичные плагины, он также более логично перелинковывает все страницы. У Вас не получится такая ситуация что на некоторые страницы будут 1-2 ссылки, а на другие по 10 ссылок, при использовании этого способа на каждую запись у Вас всегда будет по 5 ссылающихся страниц! Также плюсом можно назвать и постоянность ссылок, т.е. они не буду изменяться при появлении новых записей.
Пример такой перелинковки Вы можете наблюдать на этом блоге 😉
За данный способ огромное спасибо блогу Dimox'a и пользователю Kama (который оптимизировал код).
Существует еще один способ создать внутреннюю перелинковку без использования плагинов, но у него другой принцип работы. Перелинковка создается при помощи вывода похожих записей, похожие записи находятся благодаря одинаковым тегам (если Вы не используете теги, то данный способ не для Вас!).
<?php $tags = wp_get_post_tags($post->ID); if ($tags) { $tag_ids = array(); foreach($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id; $args=array( 'tag__in' => $tag_ids, 'post__not_in' => array($post->ID), 'showposts'=>5, // Количество записей для вывода. 'caller_get_posts'=>1 ); $my_query = new wp_query($args); if( $my_query->have_posts() ) { echo '<h3>Похожие записи</h3><ul>'; while ($my_query->have_posts()) { $my_query->the_post(); ?> <li><a href="<?php the_permalink() ?>" rel="bookmark" title="Постоянная ссылка на <?php the_title_attribute(); ?>"><?php the_title(); ?></a></li> <?php } echo '</ul>'; } } ?>
Минусом такого способа является то что некоторые записи могут остаться вообще без ссылающихся на них страниц, ведь иногда теги уникальны и находятся только у одной или нескольких записей, по этому эти страницы останутся без внимания 🙁
В общем могу сказать одно - ИМХО 1 способ это самый лучший вариант внутренней перелинковке блогов на WordPress т.к. он потребляет очень мало ресурсов, все записи получают по 5 ссылок (не одна запись не останется без внимания), СДЛ'ьность - благодаря этому способу пользователь может найти другие интересующие его записи (т.к. записи выводятся из той же рубрики что и сам пост), в общем хорош он на все 100% 😉 РЕКОМЕНДУЮ!
А как все же сделать, чтобы писался заголовок, как сдесь Предыдущие записи из рубрики Настройка WordPress. Где это прописать?
И, если в рубрике будет 1 статья, то заголовок будет писаться?
И еще вопрос как у вас сделана форма обратной связи с помощью плагина? или нет?
Я себе поставил туда где колонка управление, которая мне совсем ну нужна. Написал Облако меток и вставил код. Спасибо Вам за код и статью !
2 способ не дружит с wp3.1, комментарии гуляют.
А для амиро (amiro cms) ничего нету? Сайт старый как колода таро Висконси, страниц очень много. Вручную его линковать смерти подобно. А хочется.
Anna, к сожалению не знаю эту CMS.
Жаль. Спасибо за ответ.
Сергей,
Запусти Restart Denwer
Спасибо, получилось. А то плагины как то напрягают
Подскажите новичку, ради Бога, в какое место single.php мне вставить ваш шаблон, чтобы после текста статьи были 5 предыдущих ссылок рубрики Заранее благодарен!
я поставил плагин перелинковки и нормально все работает, ничего не тормозит
Подскажите пожалуйста как подключить транзитное кеширование к функции вывода предыдущих постов из категории?
Появилась проблема с нагрузкой на одном блоге, в одной категории несколько тысяч постов.