Внутренняя перелинковка в WordPress без использования плагинов

Существует много плагинов для внутренней перелинковки, но иногда использовать их нецелесообразно т.к. они потребляют много ресурсов и не всегда гибко настраиваются, к счастью существует способ создать внутреннюю перелинковку без использования плагинов! Благодаря этому способу Вы можете вывести предыдущие 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 строке (show_previous_posts_from_category($post->ID, $the_cat_id, 5);) изменяется количество выводимых постов, по умолчанию выводится 5 предыдущих постов.

По мимо того что этот способ использует намного меньше ресурсов чем аналогичные плагины, он также более логично перелинковывает все страницы. У Вас не получится такая ситуация что на некоторые страницы будут 1-2 ссылки, а на другие по 10 ссылок, при использовании этого способа на каждую запись у Вас всегда будет по 5 ссылающихся страниц! Также плюсом можно назвать и постоянность ссылок, т.е. они не буду изменяться при появлении новых записей.

Так же существует еще один способ создать внутреннюю перелинковку без использования плагинов, но у него другой принцип работы. Перелинковка создается при помощи вывода похожих записей, похожие записи находятся благодаря одинаковым тегам (если Вы не используете теги, то данный способ не для Вас!).

<?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% ;-) РЕКОМЕНДУЮ!

h++p://www.wp-info.ru/vnutrennyaya-perelinkovka-v-wordpress-bez-ispolzovaniya-plaginov/

4 комментария

  1. Доброго времени суток. На протяжении нескольких лет нагло пользуюсь Вашим кодом, за что искренне благодарен. Первым по категориям. но возник один вопрос. На сайте, который я написал под ником, я решил переделать и оптимизировать старый свой проект. Открыл категории, вывел анонсы, подменял коды h1-h2-H3 даже в категориях h1. Сделал ститическую главную. Там в рубрике рекомендации выводятся публикации с разных, других рубрик. Я ее закрыл от роботов, дублей. Но столкнулся с тем, что выводятся в одноименной посты, которых я не хочу их так кольцевать. Кольцовку я сделал по 1 посту. Как исключить данную рубрику в Вашем коде. Спасибо.

  2. Olega, с данным вопросом Вам следует обратиться либо к специалистам на WP форуме, либо к автору статьи (ссылку ищи в конце моей статьи)…

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*


4 × 3 =