Как контролировать, какая категория будет выбрана для заголовка сообщения?


Я использую структуру постоянных ссылок "/%категория%/%имя сообщения%/".

Что меня беспокоит, так это то, что у меня есть посты, которые относятся к двум категориям. И, конечно, к сожалению, Wordpress всегда выбирает неправильный вариант для поколения слизняков.

Есть ли хороший и чистый способ контролировать, какая категория будет выбрана для почтовых слизней?

Большое спасибо!

Author: TigrouMeow, 2012-03-26

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; используйте глобальное (грязное) или свойство класса (чистое).

Вы можете попробовать различные плагины для постоянных ссылок например:

 4
Author: soulseekah, 2012-03-26 08:35:04

Вы всегда можете использовать плагин. Постоянная ссылка категории Хикари делает именно то, что вы ищете... без всяких хлопот.

 1
Author: Travis Pflanz, 2012-03-26 19:07:08

ЕСЛИ вы можете сохранить нужную категорию в качестве постоянной ссылки по умолчанию, то вы можете подключиться к функции get_permalink с помощью фильтра "pre_post_link"....

Это также может помочь, взгляните.. http://shibashake.com/wordpress-theme/wordpress-permalink-add

 0
Author: Rajeev Vyas, 2012-03-26 08:09:23