Подтвердить что ты не робот

Пользовательская структура констант:/% custom-post-type%/% custom-taxonomy%/% post-name%/%

Я пытаюсь создать настраиваемую структуру permalink, которая позволит мне выполнить следующее.

  • У меня есть пользовательский тип сообщения, называемый "проекты"
  • У меня есть обычная таксономия, называемая "категория проекта", которая присваивается проектам CPT

Я хочу, чтобы моя структура permalink выглядела так:

Проекты//имя-проекта категория

или

/% на заказ после типа%/% имя после заказа таксономии%/%%/

Я смог успешно использовать /% category%/в постоянных ссылках для обычных, готовых сообщений WP, но не для CPT.

Как создать такую ​​структуру permalink для URL-адресов или других страниц? Возможно ли определить пользовательскую структуру константной ссылки и ограничить ее одним CPT?

Спасибо

4b9b3361

Ответ 1

К счастью для вас, я просто должен был сделать это для клиентского проекта. Я использовал этот ответ в WordPress Stackexchange в качестве руководства:

/**
 * Tell WordPress how to interpret our project URL structure
 *
 * @param array $rules Existing rewrite rules
 * @return array
 */
function so23698827_add_rewrite_rules( $rules ) {
  $new = array();
  $new['projects/([^/]+)/(.+)/?$'] = 'index.php?cpt_project=$matches[2]';
  $new['projects/(.+)/?$'] = 'index.php?cpt_project_category=$matches[1]';

  return array_merge( $new, $rules ); // Ensure our rules come first
}
add_filter( 'rewrite_rules_array', 'so23698827_add_rewrite_rules' );

/**
 * Handle the '%project_category%' URL placeholder
 *
 * @param str $link The link to the post
 * @param WP_Post object $post The post object
 * @return str
 */
function so23698827_filter_post_type_link( $link, $post ) {
  if ( $post->post_type == 'cpt_project' ) {
    if ( $cats = get_the_terms( $post->ID, 'cpt_project_category' ) ) {
      $link = str_replace( '%project_category%', current( $cats )->slug, $link );
    }
  }
  return $link;
}
add_filter( 'post_type_link', 'so23698827_filter_post_type_link', 10, 2 );

При регистрации настраиваемого типа сообщений и таксономии обязательно используйте следующие настройки:

// Used for registering cpt_project custom post type
$post_type_args = array(
  'rewrite' => array(
    'slug' => 'projects/%project_category%',
    'with_front' => true
  )
);

// Some of the args being passed to register_taxonomy() for 'cpt_project_category'
$taxonomy_args = array(
  'rewrite' => array(
    'slug' => 'projects',
    'with_front' => true
  )
);

Конечно, не забудьте сбросить правила перезаписи, когда закончите. Удачи!

Ответ 2

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

$post_type_args = array(
  'rewrite' => array(
    'slug' => 'projects',
    'with_front' => true
  )

Вы можете попробовать с Setting-> Постоянная ссылка

сделать родителем этого поста и сделать ссылку