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

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

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

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

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

Solutions Collecting From Web of "Как контролировать, какая категория будет выбрана для пули сообщения?"

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