Slug добавляет -2, хотя другие сообщения с тем же именем находятся в отдельном типе сообщения

Это раздражает, и из-за этого я отделил их типы сообщений.

Теперь у меня есть два типа сообщений:

  1. motogp-2013
  2. motogp-2014

В моем motogp-2013 типе motogp-2013 меня было мероприятие под названием «Гран-при Франции», которое превратилось в «гран-при-де-франс» в качестве постоянной ссылки.

Я сейчас в motogp-2014 post-type, и я добавил сообщение с тем же названием «Гран-при Франции», которое превратилось в «Grand Prix-de-france-2» в качестве постоянной ссылки.

Несмотря на то, что они являются полностью отдельными пост-типами, они добавляют 2 после постоянной ссылки.

Почему это? Можно ли его остановить?

Если вы посмотрите код wp_unique_post_slug – вы увидите, что …

  1. Если его тип записи – он будет проверять только ID и post_name
  2. Если его иерархический тип сообщения (например, страница) – его будет проверять наличие post_name на том же уровне (и точно такой же post_type )
  3. nav_menu_item также является hierarchical типом сообщения, но он не требует какого-либо slug, поэтому его пропускают.
  4. Else … он проверяет наличие post_name если тот же post_type

Пожалуйста, взгляните на 4 пункта в моем списке. Это ваше дело.

WP не волнует, если у вас есть такая пуля в том же post_type с post_status, что и Draft, Pending или AutoDraft … но, допустим, если у you have such a post with post_status Published or Trash … ну в этом случае вы беззастенчиво (для я) получит номер dash + iterator number в вашем слизе.

если вы запустите запрос – возможно, вы увидите разные статусы сообщений по сообщениям non Uniq slug

  SELECT COUNT( * ) AS `total` , `post_name` , CONCAT_WS(' and ', post_status) as Statuses FROM `wp_posts` WHERE `post_type` = 'motogp-2013' GROUP BY CONCAT_WS(' and ', `post_name` ) `post_name` ORDER BY `total` DESC LIMIT 0 , 30 

Тем не менее, если вам не повезло узнать о том, что вы хотите сгенерировать, вы не можете генерировать … вы можете использовать фильтр для uniq slugs …

wp_unique_post_slug может иметь 7 аргументов … ($ slug, $ post_ID, $ post_status, $ post_type, $ post_parent, $ original_slug), которые вы можете использовать …

  add_filter('wp_unique_post_slug', 'se_126293_wp_unique_post_slug',10,7); function se_126293_wp_unique_post_slug($slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug){ // do whatever you want with a slug, but whatch out return $slug; } 

Вы можете поместить этот код в functions.php или плагин вашей темы …