sef-ссылки в 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, Программирование    |    Постоянная ссылка

Снимаем ограничение на длину SEF-ссылки в WordPress

Май 25, 2012

По-умолчанию название записи в UTF-8 кодируется в безопасные символы и затем составляется SEF-ссылка.

WordPress ограничивает длину ссылки в 200 символов.

Для того, чтобы снять ограничение придется исправить файл в папке wp-includes, а именно formatting.php.

Нас интересует следующая функция:

function sanitize_title_with_dashes($title, $raw_title = '', $context = 'display') {

В теле функции находим:

$title = utf8_uri_encode($title, 200);

Заменяем 200 символов на желаемое значение. Я расширил его до 500.

Важно! При обновлении WordPress необходимо заново отредактировать файл.

Однако, на этим все не ограничивается.

Далее заходим в используемую для блога Базу данных через PhpMyAdmin. Нас интересует таблица _posts.
Переключаемся с "Обзора" на "Структуру" и редактируем поле "post_name". Устанавливаем "Длину/значения" в 500 и сохраняем изменения.

Теперь можно попробовать преобразовать длинное название в SEF-ссылку.

Для тех, у кого установлен плагин SEO Ultimate во вкладке "Modules" для верности требуется отключить "Slug Optimizer" – установить значение в "Disabled" и сохранить изменения.

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