Євген Самборський в своїй статті «Як домогтися гарної індексації статей» розповів про цікавий спосіб внутрішньої перелинковки статей сайту.
Суть методу полягає в тому, що на сторінку зі статтею поміщається блок «Попередні з рубрики» в якому публікується кілька попередніх статей з тієї ж самої рубрики в хронологічному порядку.
Процитую Женю:
Під текстом кожної статті на своїх і клієнтських сайтах я роблю список з 5-ти раніше опублікованих статей з рубрики. Зауважу, що багато хто робить подібні списки, але найчастіше в них посилання на останні статті. Я ж лінки саме попередні, грубо кажучи якщо у поточній статті ID = 10, то в списку попередніх будуть статті з ID 9,8,7,6,5. Кожна стаття отримує мінімум 4 вічних внутрішніх посилання.
Природно, після прочитання статті я загорівся бажанням реалізувати таку корисну штуку на WordPress'е. І, природно, я її зробив.
Більш того, за підказкою Дена я пішов ще далі, ніж задумував спочатку - зробив кільцеву перелинковку. Для наочності приклад - в рубриці є 10 статей, і в списку ми виводимо 5 статей. При заході в 3-ю статтю, список «Попередні з рубрики» буде містити посилання на статті 2, 1, 10, 9, 8.
В результаті кожна стаття рубрики отримує на себе однакову кількість посилань з тієї ж самої рубрики.
«Давай вже, Дімокс, не томи, викладай код на стіл!» (Голос із залу =).
Окей, викладаю. Він, до речі кажучи, вийшов досить монструозної:
<? Php $ li = 5; // скільки посилань показувати в списку $ postID = $ post-> ID; $ PostDate1 = get_the_time ( 'YmdHis', '', '', false); $ Cat = get_the_category (); $ Cat = $ cat [0]; $ Cat = $ cat-> cat_ID; $ CatQuery = new WP_Query ( 'showposts = -1 & cat ='. $ Cat); $ I = 0; if ($ catQuery-> have_posts () && $ catQuery-> post_count> 1):?> <ul> <? php while ($ catQuery-> have_posts ()): $ catQuery-> the_post (); $ PostDate2 = get_the_time ( 'YmdHis', '', '', false); if ($ postDate2 <$ postDate1 && $ post-> ID! = $ postID) {$ i ++; if ($ i <= $ li) {?> <li> <a href="<?php the_permalink() ?> "rel =" bookmark "> <? php the_title (); ?> </a> </ li> <? Php}} endwhile; ?> <? Php $ posts = $ li - $ i; $ Cat_count = get_category ($ cat) -> category_count; ?> <? Php if (($ cat_count - 1)> $ i) {if ($ posts> 0) {$ temp_query = $ wp_query; if (($ cat_count - 1) <$ li) $ posts = $ cat_count - 1 - $ i; query_posts ( 'showposts ='. $ posts. '& cat ='. $ cat); if (have_posts ()): while (have_posts ()): the_post (); ?> <Li> <a href="<?php the_permalink() ?> "rel =" bookmark "> <? Php the_title (); ?> </a> </ li> <? Php endwhile; endif; $ Wp_query = $ temp_query; }}?> </ Ul> <? Php endif; wp_reset_query (); ?>
Код необхідно запхати в файл single.php. Якщо ви не розбираєтеся в шаблонах WordPress, то краще взагалі нічого не чіпати.
Шаблон посилання зустрічається в цьому коді 2 рази (зверніть на це увагу) і має наступний вигляд:
<Li> <a href="<?php the_permalink() ?> "rel =" bookmark "> <? Php the_title (); ?> </a> </ li>
У цьому шаблоні можна використовувати всі ті ж php-теги, які використовуються в стандартному WordPress-циклі.
Код перевірявся тільки на WordPress 2.8.4, тому роботу в інших версія я не гарантую.
Живий приклад ви можете побачити безпосередньо на даному блозі у вкладці «Попередні з рубрики», яка знаходиться під кожною статтею.
PS До речі, за аналогією можна зробити внутрішню перелінковку статей і для блогу в цілому, а не тільки в межах рубрик.
Update 29.11.09
У коментарях підказали правильніший варіант коду для виведення списку (спасибі користувачеві Kama!), Який, в порівнянні з моїм варіантом, бере з БД тільки ті пости, які з'являться в списку (в моєму варіанті спочатку зчитуються ВСЕ записи поточної рубрики, і тільки потім відбувається вибірка).
<? 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 (); ?>
Кількість посилань вказується в самій останньому рядку коду. Шаблон посилання також знаходиться в двох місцях.
* * *
система обміну Посилання нового покоління LinkToLink.ru - безкоштовне просування сайтів, додатковий заробіток без комісій.
Gt; <ul> <?Gt; <li> <a href="<?
Php the_permalink() ?
Gt; "rel =" bookmark "> <?
Php the_title (); ?
Gt; </a> </ li> <?
Php}} endwhile; ?
Gt; <?