короткие ссылки в WordPress

’tag’

Использование короткой ссылки в TrackBack при русской SEF-ссылке в WordPress

Май 26, 2012

Если один сайт хочет уведомить другой о том, что использует ссылку на чужую запись, то в WordPress используется TrackBack ссылка, которая получается посредством вызова функции trackback_url.

Функция находится в следующем файле:
/wp-includes/comment-template.php

Функция trackback_url в свою очередь вызывает функцию get_trackback_url:

function get_trackback_url() {
	if ( '' != get_option('permalink_structure') ) {
		$tb_url = trailingslashit(get_permalink()) . user_trailingslashit('trackback', 'single_trackback');
	} else {
		$tb_url = get_option('siteurl') . '/wp-trackback.php?p=' . get_the_ID();
	}
	return apply_filters('trackback_url', $tb_url);
}

Как видно из функции get_trackback_url, если на сайте используются SEF-ссылки, то и TrackBack ссылка будет SEF-вида.

Проблема заключается в том, что при использовании SEF-ссылок с кириллическими символами, ссылка получается довольно длинная и скорее хочется использовать короткую ссылку вида /?p=POST_ID.

Из функции get_trackback_url видно, что без SEF-ссылок TrackBack ссылка имеет вид:

$tb_url = get_option('siteurl') . '/wp-trackback.php?p=' . get_the_ID();

Не составляет труда в используемой теме WordPress заменить функцию trackback_url на собственный код:

<a href="<?php echo get_option('siteurl') . '/wp-trackback.php?p='; ?><?php the_ID(); ?>" rel="trackback" title="<?php the_title(); ?>">

Несмотря на хорошее решение при нажатии на ссылку будет получен ответ от файла wp-trackback.php, сообщающий, что ID записи не распознано:

<?xml version="1.0" encoding="utf-8"?>
<response>
<error>1</error>
<message>I really need an ID for this to work.</message>
</response>

Копание в файле wp-trackback.php меня ни к чему не привело.

Так как SEF-ссылка имеет на конце /trackback/, то я остановился на следующем варианте, который работает без ошибок с перенаправлением на страницу с записью:

<a href="<?php echo get_option('siteurl') . '/?p='; ?><?php the_ID(); ?>/trackback/" rel="trackback" title="<?php the_title(); ?>">

Не уверен в правильности работы данного метода, но не собираюсь его менять.

Tags: , , , , ,
Записано в WordPress, Программирование    |    Постоянная ссылка