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

Я использую структуру permalink "/% category% /% postname% /".

Меня беспокоит то, что у меня есть записи, относящиеся к двум категориям. И, конечно, WordPress всегда, к сожалению, выбирает неправильное для генерации пули.

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

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

WordPress выбирает наименьший ID в качестве основной постоянной ссылки. Однако ВСЕ категории будут содержать ваш пост автоматически. Значение обоих этих:

  • Http: // YourSite / категория-A / пост-A
  • Http: // YourSite / категория-B / пост-A

… вернет ваше сообщение (учитывая, что пост-A относится как к категории-A, так и к категории-B) посредством перенаправления. Он не может перечислить их все на странице редактирования, извините. Но он будет уверен, что они доступны во всех категориях.

Конечно, 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 после сортировки по ID. Кажется, что он не может быть каким-либо образом подключен внутрь, поэтому либо выше, либо ниже.

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

Вы можете попробовать различные плагины permalink, такие как:

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

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

Это также может помочь, посмотрите. http://shibashake.com/wordpress-theme/wordpress-permalink-add