Делаем внутреннюю ссылку на пост

Добавляем ссылку на текущую публикацию непосредственно в контенте. Ссылка должна выводиться на главной, в рубриках и тегах. Скажем, картинку в анонсе, обтекаемую текстом, делаем ссылкой. Вариант с рукописным HTML, сами понимаете, не проходит.

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

Итак, нам в любом случае нужно внести изменения в type-файлы home.php, category.php, tag.php, page.php и search.php.

В файлы home.php, category.php и tag.php перед строкой

mso_page_content($page_content);

добавляем код:


$url = getinfo('site_url') . 'page/' . $page_slug;

if ((strpos($page_content, '[a-gal]') !== false) or (strpos($page_content, '[a-page]') !== false))
{
	$pt[0] = '~\[(link|link-gal)\]~si';
	$pt[1] = '~\[/(link|link-gal)\]~si';
	$re[0] = '<a class="custom-link" href="' . $url . '" title="' . $page_title . '">';
	$re[1] = '</a>';
	$page_content = preg_replace($pt, $re, $page_content);
}

Атрибуты ссылки class и title естественно, не обязательны.

В page.php перед той же строкой mso_page_content($page_content); добавляем:


if (strpos($page_content, '[link-gal]') !== false)
{
	$page_content = preg_replace('~\[link-gal\](.*?)\[/link-gal\]~si', '', $page_content);
}
if (strpos($page_content, '[link]') !== false)
{
	$pt[0] = '~\[link\]~si';
	$pt[1] = '~\[/link\]~si';
	$re[0] = '';
	$page_content = preg_replace($pt, $re, $page_content);
}

В search.php перед строкой

$page_content = mb_strtolower(strip_tags($page_content), 'UTF-8' );

добавляем:


if ((strpos($page_content, '[link]') !== false) or (strpos($page_content, '[link-gal]') !== false) )
{
	$page_content = preg_replace('~\[(link|link-gal)\](.*?)\[/(link|link-gal)\]~si', '', $page_content);
}

(На странице результатов поиска исключаем вывод псевдотегов).

В результате имеем следующее:

Если мы обернули элемент псевдотегами [link]…[/link] или [link-gal]…[/link-gal]:

  • на страницах типов home, category и tag этот элемент будет выводиться как ссылка.
  • [link]…[/link] на странице page выведет только сам элемент без ссылки.
  • [link-gal]…[/link-gal] на странице page не выведет ничего.

UPD. Привел имена псевдотегов и класс ссылки в соответствие с плагином Custom link, чтобы не было чехарды в названиях.

Loading comments …   ←   Делаем внутреннюю ссылку на пост

Fields marked with asterix are required.


Max 40 alpha-numeric characters, including spaces.


Valid email. Max 255 characters. Not displayed publicly.

*