Как контролировать, какая категория будет выбрана для заголовка сообщения?
Я использую структуру постоянных ссылок "/%категория%/%имя сообщения%/".
Что меня беспокоит, так это то, что у меня есть посты, которые относятся к двум категориям. И, конечно, к сожалению, Wordpress всегда выбирает неправильный вариант для поколения слизняков.
Есть ли хороший и чистый способ контролировать, какая категория будет выбрана для почтовых слизней?
Большое спасибо!
3 answers
WordPress выбирает самый низкий идентификатор в качестве своей основной постоянной ссылки. Однако ВСЕ категории будут автоматически содержать ваш пост. Имеется в виду и то, и другое:
...вернет ваш пост (учитывая, что пост-А относится как к категории-А, так и к категории-В) через перенаправление. Извините, он не может перечислить их все вам на странице редактирования. Но это позволит убедиться, что они доступны в все категории.
Конечно, get_permalink
вернет вам не тот.
Http://codex.wordpress.org/Using_Permalinks#Using_.25category.25_with_multiple_categories_on_a_post
Теперь, что касается переопределения поведения, посмотрите на:
Http://core.trac.wordpress.org/browser/tags/3.3.1/wp-includes/link-template.php#L71 , в частности, немного ниже в строке 121. Он будет использовать $cats[0]->slug
после сортировки по идентификатору. Который, по-видимому, не является подключаемый любым способом внутри, так что либо выше, либо ниже.
Это билет, который должен был изменить способ его работы http://core.trac.wordpress.org/ticket/18752 однако он помечен для Будущего выпуска. Подпишитесь на билет, чтобы показать свой интерес, возможно, он появится в WordPress 3.5 позже в этом году.
В pre_post_link
фильтр позволит вам переопределить постоянную ссылку. post_link
, тоже.
Альтернативный вариант, get_the_category
, должно позволить вам взломать идентификаторы для публикации (или удалить остальные, чтобы оставить только один), но это должно происходить только при запросе постоянной ссылки.
add_filter( 'pre_post_link', function( $permalink, $post ) {
if ( strpos($permalink, '%category%') === false )
return; /* not interested */
add_filter( 'get_the_categories', 'wpse46860_prune_categories' );
return $permalink;
}, null, 2 );
function wpse46860_prune_categories( $categories ) {
/* run once */
remove_filter( 'get_the_categories', 'wpse46860_prune_categories' );
/* .. prune the categories to leave the one you need .. */
global $_hijack_post_id;
return $categories;
}
Это взлом.
Дополнительная трудность заключается в том, чтобы заставить post_ID обрезать категории, фильтр get_the_categories
не передает нам post_ID; используйте глобальное (грязное) или свойство класса (чистое).
Вы можете попробовать различные плагины для постоянных ссылок например:
Вы всегда можете использовать плагин. Постоянная ссылка категории Хикари делает именно то, что вы ищете... без всяких хлопот.
ЕСЛИ вы можете сохранить нужную категорию в качестве постоянной ссылки по умолчанию, то вы можете подключиться к функции get_permalink с помощью фильтра "pre_post_link"....
Это также может помочь, взгляните.. http://shibashake.com/wordpress-theme/wordpress-permalink-add