Создание коротких кодов по таксономии

Проверьте этот код:

function slide_group() { register_taxonomy('Group', 'slides', array( 'hierarchical' => true /*visualizza come le categorie*/, 'label' => 'Group', 'query_var' => true, 'rewrite' => true));} add_action('init', 'slide_group', 0); function square_slider_template() { // Query Arguments $args = array( 'post_type' => 'slides', 'posts_per_page' => 5 ); // The Query $the_query = new WP_Query( $args ); // Check if the Query returns any posts if ( $the_query->have_posts() ) { // Start the Slider ?> <div class="flexslider"> <ul class="slides"> <?php // The Loop while ( $the_query->have_posts() ) : $the_query->the_post(); ?> <li> <?php // Check if there's a Slide URL given and if so let's a link to it if ( get_post_meta( get_the_id(), 'square_slideurl', true) != '' ) { ?> <a href="<?php echo esc_url( get_post_meta( get_the_id(), 'square_slideurl', true ) ); ?>"> <?php } // The Slide's Image echo the_post_thumbnail(); // Close off the Slide's Link if there is one if ( get_post_meta( get_the_id(), 'square_slideurl', true) != '' ) { ?> </a> <?php } ?> </li> <?php endwhile; ?> </ul><!-- .slides --> </div><!-- .flexslider --> <?php } // Reset Post Data wp_reset_postdata(); } // Slider Shortcode function square_slider_shortcode() { ob_start(); square_slider_template(); $slider = ob_get_clean(); return $slider; } add_shortcode( 'slider', 'square_slider_shortcode' ); 

Этот код создает слайдер на основе пользовательского типа «слайдер», используя миниатюру. Я также создал обычную таксономию.
То, что я сделал бы, это создать цикл «foreach», основанный на таксономическом термине, который создает короткий код с названием таксономии ([дизайн], [разработка] и т. Д. ИЛИ [ползунок = дизайн], [ползунок = develop]), которые содержат только должности taxonomy_term.
Например, [дизайн] содержит / отображает только сообщение с таксономией проекта, [develop] содержит / отображает только сообщение с развитием таксономии и т. Д.

EDIT / UPDATE # 2

Я на этом шаге:

  function square_slider_shortcode( $atts = array(), $content = '' ) { $atts = shortcode_atts( array( 'type' => '00', // default type ), $atts, 'square_slider' ); // Sanitize input: $pid = sanitize_title( $atts['type'] ); // Output return square_slider_template( $pid ); } add_shortcode( 'slider', 'square_slider_shortcode' ); function square_slider_template( $pid = '' ) { $args = array( 'post_type' => 'slides', 'p' => $pid, ); ?> <?php // The Query $query = new WP_Query( $args ); // Check if the Query returns any posts if ( $query->have_posts() ) { // Start the Slider ?> <div class="flexslider"> <ul class="slides"> <?php // The Loop while ( $query->have_posts() ) : $query->the_post(); for ($i = 1; $i <= 10; $i++): $num_slide="slide_" . $i; $slide = get_field($num_slide); ?> <?php if (!empty($slide)): ?><li><img src="<?php echo $slide; ?>"></li> <?php endif; ?> <?php endfor; ?> <?php endwhile; ?> </ul><!-- .slides --> </div><!-- .flexslider --> <?php } // Reset Post Data wp_reset_postdata(); } 

Я решил таким образом создать петлю со слайдами, и я создам слайдер. Это не разумный способ или правильный способ, но он работает 🙂
UPDATE: все работает, но слайдер появляется всегда в верхней части страницы, независимо от положения внутри редактора.
Я попытался поместить его в другой [one_third][slider type="98"][/one_third][one_third_last]casual words[/one_third_last] например [one_third][slider type="98"][/one_third][one_third_last]casual words[/one_third_last] но он появляется за пределами тега div, как вы можете видеть на изображении введите описание изображения здесь

Вы хотите определить потенциально огромное количество разных коротких кодов с одним и тем же обратным вызовом короткого кода?

Почему бы вам не определить один короткий код с атрибутом term? Например

 [sc term="london"] 

пс:

Я думаю, что ваша проблема заключается в части $tax_term->name , которая может быть такой же строкой, как City of London, и это не допустимое имя $tax_term->name . $tax_term->slug этого попробуйте $tax_term->slug , но я не думаю, что это хорошая стратегия!

Другая проблема заключается в том, что вы определяете функцию внутри цикла foreach. Это должно дать вам такую ​​ошибку, как: Fatal error: Cannot redeclare examples_shortcode() ...

Вы должны использовать WP_DEBUG в своем WP_DEBUG . Вот хорошая отправная точка.

Обновить:

Вы можете использовать, например:

 function square_slider_shortcode( $atts = array(), $content = '' ) { $atts = shortcode_atts( array( 'type' => 'sport', // default type 'nr' => 5, // default number of slides ), $atts, 'square_slider' ); // Sanitize input: $type = sanitize_title( $atts['type'] ); $nr = (int) $atts['nr']; // Output return square_slider_template( $type, $nr ); } add_shortcode( 'slider', 'square_slider_shortcode' ); 

где:

 function square_slider_template( $type = '', $nr = 5 ) { // Query Arguments $args = array( 'post_type' => 'slides', 'posts_per_page' => $nr, 'tax_query' => array( array( 'taxonomy' => 'slides', 'field' => 'slug', 'terms' => $type, ), ), ); // The Query $the_query = new WP_Query( $args ); // ... etc ... return $html; } 

Тогда ваш синтаксис короткого кода будет выглядеть следующим образом:

 [slider type="sport" nr="5"] 

где теперь вы можете изменить термин ( type ) и количество слайдов ( nr ) в соответствии с вашими потребностями.

Кажется, вам нужен короткий код закрытия.
http://codex.wordpress.org/Shortcode_API будет отличным чтением, чтобы начать.