Перелінкування статей (попередні записи)

За мотивами однієї із статей на сайті dimox.name «Відмінний спосіб внутрішньої перелінкування статей (для WordPress)» . Де я вже писав у коментарях. Тепер вирішив написати у себе на блозі.

Ідея, запропонована Дімою для перелінкування статей, мені дуже сподобалася і полягає вона в наступному: перелінкувати між собою всі статті на сайті, так щоб у результаті кожна стаття мала однакову кількість внутрішніх посилань на себе. Для цього на сторінці кожної статті виводиться енна кількість посилань на попередні статті, таким чином виходить, що кожна стаття посилається, скажімо, на 5 попередніх статей, а кожна попередня ще на 5 попередніх і т.д.

Однак, зрозуміло, що якщо поточна стаття, наприклад, найперша на сайті, то в неї немає попередніх статей і відповідно жодних посилань не виводиться, для вирішення цієї проблемки ідея була доповнена поняттям ” кільцева перелінковка “, тобто. стаття, яка не має попередніх записів, буде посилатися на останні записи.

Для наочності, припустимо, що у нас на сайті 10 статей і ми виводимо по 4 попередні посилання. Тепер, коли ми зайдемо на 10 статтю, то на цій сторінці будуть показані посилання на: 9,8,7,6 статті. Якщо зайдемо на 6-ту, то буде показано посилання на: 5,4,3,2 статті. Тепер, “кільцева перелінковка”, коли зайдемо на 3 статтю будуть показані посилання на: 2,1,10,9 статті.

З таким підходом, з сайту / блогу ми робимо щось цілісне, де вже немає забутих (одиноких, осиротілих), з погляду СЕО сторінок.

Ближче до справи

Попередні статті для WordPress (загалом по сайту):

/** Попередні записи
-------------------------------------------------- ----
$format ('') = {date:jMY} - {a}{title}{/a} ({comments})
$post_num (5) = кількість посилань
$list_tag (li) = Тег списку
*/
function kama_previous_posts ($post_num=5, $format = '', $list_tag='li', $echo=true){
	Global $post, $wpdb;
	$sql ="SELECT ID, post_title, post_date, comment_count, guid
	FROM $wpdb->posts p
	WHERE post_date < '$post->post_date'
		AND post_type = 'post' AND post_status = 'publish'
	ORDER BY post_date DESC LIMIT $post_num";
	$res = $wpdb->get_results($sql);
		$exclude = $post->ID;
		foreach ($res as $id) $exclude .= ','.$id->ID;
		$ count_res = count ($ res);

	if ( !$res || $count_res<$post_num ){
		$post_num = $post_num-$count_res;
		$sql2 ="SELECT ID, post_title, post_date, comment_count, guid
		FROM $wpdb->posts p
		WHERE ID NOT IN ($exclude)
			AND post_type = 'post' AND post_status = 'publish'
		ORDER BY post_date DESC LIMIT $post_num";
		$res2 = $wpdb->get_results($sql2);
		$res = array_merge($res,$res2);
	}
	if (!$res) return false;
	preg_match ('!{date:(.*?)}!',$format,$date_m);
	foreach ($res as $pst){
		$x == 'li1'? $x = 'li2': $x = 'li1';
		$Title = $pst->post_title;
		$a1 = "<a href='". get_permalink($pst->ID) ."' title='{$Title}'>";
		$a2 = "</a>";

		if ($format) {
			$date = apply_filters('the_time', mysql2date($date_m[1],$pst->post_date));
			$Sformat = str_replace ($date_m[0], $date, $format);
			$Sformat = str_replace('{title}', $Title, $Sformat);
			$Sformat = str_replace('{a}', $a1, $Sformat);
			$Sformat = str_replace('{/a}', $a2, $Sformat);
			$Sformat = str_replace('{comments}', $pst->comment_count, $Sformat);
		}
		else $Sformat = $a1.$Title.$a2;
		$out .= "n<$list_tag class='$x'>{$Sformat}</$list_tag>";
	}
	if ($echo) echo $out;
	else return $out;
}

Копіюємо цю функцію у файл теми functions.php , а де потрібно вивести попередні посилання викликаємо функцію так:

<ul>
	<?php kama_previous_posts (5); ?>
</ul>
//Виведе 5 попередніх посилань.

Подібну функцію я писав у коментарях dimox.name. Ця функція відрізняється тим, що можна легко налаштувати формат виведення. для цього використовуємо теги:

  • {comments} – покаже кількість коментарів у статті;

  • {title} – заголовок статті;

  • {date:jMY} – дата у форматі jMY (11.квіт.2010). Формат дати можна змінитиsmile

Також тут я додав класи li1 і li2 до тегу <li> , щоб легко можна було розфарбувати список у зебру. Ще, якщо вказати третій параметр $ list_tag , можна змінити тег списку. Наприклад:

<?php kama_previous_posts (6, '', 'div') ?>
// виведе не в списку, а в div: <div class='li1'>Тут посилання</div>
Приклад використання функції із зазначенням формату виводу:
<ul>
	<?php kama_previous_posts (6, '{date:jMY} - {a}{title}{/a} (Коментарів: {comments})'); ?>
</ul>
//виведе у форматі: <li class='li1'>17. Квітень 2010 - <a href='http://посилання на статтю' title='заголовок статті'>заголовок статті</a> (Коментарів: 10 )</li>

Зверніть увагу

Ця функція виводить просто попередні статті , а не попередні з категорії, в якій знаходиться поточна стаття. Використовуйте цю функцію, щоб вивести попередні з категорії .

Залишити коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *