Если один сайт хочет уведомить другой о том, что использует ссылку на чужую запись, то в 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(); ?>">
Не уверен в правильности работы данного метода, но не собираюсь его менять.