Таксономии по URL-адресу

У меня есть пользовательский тип сообщения и две пользовательские таксономии, связанные с ним. Один – это места, а другой – действия. Как я могу создать постоянные ссылки в следующем формате?

http://mysite.com/usa/diving

Поэтому первым будет таксономия местоположения, а вторая – таксономией деятельности?

Недавно я говорил об этом на нескольких WordCamp. Вот мой разговор из WC Portland и слайдов, исходного кода и т . Д. Проверьте рецепт №2.

Во-первых, у вас, вероятно, должен быть статический префикс для запуска URL-адресов. Это не на 100% необходимо, но без этого ваша переписка будет конфликтовать с перманентными страницами. Если вы решите использовать статический префикс, вы можете захотеть сделать это по типу сообщения, так как это то, что организуют ваши таксономии. Я не знаю, что это такое, поэтому я предполагаю, что речь идет о «проводниках». В этом случае ваши URI будут что-то вроде / guide / usa / diving /.

Вот вам какой-то код, чтобы вы начали. Если вам что-то не имеет смысла, вы должны посмотреть презентацию и следовать за слайдами.

 <?php /** * Setup custom permalinks with multiple taxonomies */ if ( !class_exists( 'WPSE_110508' ) ) : class WPSE_110508 { private static $instance; public static function instance() { if ( ! isset( self::$instance ) ) { self::$instance = new WPSE_110508; self::$instance->setup(); } return self::$instance; } public function setup() { add_action( 'init', array( $this, 'structures' ) ); add_filter( 'post_type_link', array( $this, 'post_type_link' ), 10, 2 ); add_filter( 'term_link', array( $this, 'term_link' ), 10, 3 ); } /** * Register our data structures * * @return void */ function structures() { register_taxonomy( 'location', 'guide', array( 'label' => 'Body Types', 'rewrite' => array( 'slug' => 'guides' ) ) ); add_permastruct( "all_activities", "guides/all/%activity%" ); register_taxonomy( 'activity', 'guide', array( 'label' => 'Activities', 'rewrite' => array( 'slug' => 'guides/%location%' ) ) ); register_post_type( 'guide', array( 'public' => true, 'label' => 'Guides', 'rewrite' => array( 'slug' => 'guides/%location%/%activity%' ) ) ); } /** * Filter post type links for guides to replace %location% & %activity% if present * * @param string $link * @param object $post * @return string */ function post_type_link( $link, $post ) { if ( 'guide' == $post->post_type ) { if ( $locations = get_the_terms( $post->ID, 'location' ) ) { $link = str_replace( '%location%', array_pop( $locations )->slug, $link ); } if ( $activities = get_the_terms( $post->ID, 'activity' ) ) { $link = str_replace( '%activity%', array_pop( $activities )->slug, $link ); } } return $link; } /** * Filter term links for activities to replace %location% with "all" * * @param string $termlink * @param object $term * @param string $taxonomy * @return string */ function term_link( $termlink, $term, $taxonomy ) { if ( 'activity' == $taxonomy ) { return str_replace( '%location%', 'all', $termlink ); } return $termlink; } } function WPSE_110508() { return WPSE_110508::instance(); } add_action( 'after_setup_theme', 'WPSE_110508' ); endif; 

Кажется, вы используете две неиерархические пользовательские таксономии. Попробуйте использовать единую иерархическую пользовательскую таксономию (представьте, как работают категории). Таким образом, ваши URL-адреса смогут выглядеть как «usa / diving».

Когда вы регистрируете свою пользовательскую таксономию через функцию functions.php вашей темы, сделайте что-то вроде этого:

 'hierarchical' => true, 

Функция .php – это <?php get_term_link( $term, $taxonomy ); ?> <?php get_term_link( $term, $taxonomy ); ?> и здесь у вас есть пример того, как вы можете использовать это в своем коде: $ terms = get_terms ('species');

 echo '<ul>'; foreach ($terms as $term) { //Always check if it's an error before continuing. get_term_link() can be finicky sometimes $term_link = get_term_link( $term, 'species' ); if( is_wp_error( $term_link ) ) continue; //We successfully got a link. Print it out. echo '<li><a href="' . $term_link . '">' . $term->name . '</a></li>'; } echo '</ul>'; 

Кажется, у вас на самом деле есть несколько вариантов.

  • Пользовательские постоянные ссылки для пользовательских типов сообщений
  • Инструмент GD Custom Post and Taxonomies
  • WordPress Форум
  • Smashing Magazine – Пользовательские таксономии

Удачи!