web-dev-qa-db-ja.com

分類法によるショートコードの生成

このコードを確認してください。

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」ループを作成することです([design]、[Develop]など)。[OR taxonomy_termの投稿のみを含む[slider type = design]、[slider type = development])。
例えば、[design]はデザイン分類法のあるポストのみを含む/表示し、[Develop]は開発分類法のあるポストのみを含む/表示します。


編集/更新#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();
}

私はこのようにして解決しました。スライドを使ってループを作成し、スライダーを作成します。それは賢いやり方や正しいやり方ではありませんが、うまくいきます:)
更新:すべてうまくいきますが、エディタ内の位置とは無関係に、スライダがページの上部にalwaysと表示されます。
私はそれを[one_third][slider type="98"][/one_third][one_third_last]casual words[/one_third_last]のような別のショートコードの中に入れようとしましたが、あなたがイメージで見ることができるようにdivタグの外側に現れます enter image description here

1
dborghez

あなたは同じショートコードコールバックで潜在的に膨大な数の異なるショートコードを定義したいですか?

Term属性を使ってsingleshortcodeを定義しないのはなぜですか。例えば

[sc term="london"]

ps:

あなたの問題は$tax_term->nameの部分にあると思います。これはCity of Londonのような文字列になり得ますが、これは有効なショートコード名ではありません。代わりに$tax_term->slugを試してください、しかし私はそれが良い戦略だとは思わない!

もう1つの問題は、foreachループ内で関数を定義しているということです。 Fatal error: Cannot redeclare examples_shortcode() ...のようなエラーになるはずです。

開発には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"]

ここで、必要に応じてtermtype)およびスライド数nr)を変更できます。

4
birgire

それはあなたがseft-closingショートコードを必要としているようです。
http://codex.wordpress.org/Shortcode_API を読むのはよいでしょう。

1
Abhik