按分类生成短码

时间:2014-03-28 作者:dborghez

检查此代码:

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\' );
这段代码使用缩略图图像基于“slider”自定义帖子类型创建一个滑块。我还创建了一个自定义分类法
我要做的是基于分类术语创建一个“foreach”循环,该循环使用分类术语名称([设计]、[开发]等…或[滑块类型=设计]、[滑块类型=开发])创建一个短代码,该短代码只包含分类术语的帖子<例如,[设计]仅包含/显示具有设计分类法的帖子,[开发]仅包含/显示具有开发分类法的帖子等

编辑/更新#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

2 个回复
SO网友:birgire

您希望使用same 短代码回调?

为什么不定义一个带有term属性的单短码?例如

[sc term="london"]
ps:

我认为你的问题在于$tax_term->name part,它可以是类似伦敦金融城的字符串,但这不是有效的短代码名称。尝试$tax_term->slug 相反,但我认为这不是一个好策略!

另一个问题是,您正在foreach循环中定义一个函数。这会给您带来如下错误:Fatal error: Cannot redeclare examples_shortcode() ....

您应该考虑使用WP_DEBUG 在你的发展中。Here\'s 一个良好的起点。

更新:

您可以使用以下示例:

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) 满足您的需求。

SO网友:Abhik

似乎您需要一个seft结束短代码
http://codex.wordpress.org/Shortcode_API 这将是一本很好的入门读物。

结束

相关推荐

Manipulated shortcode output

我开发的一个注册短代码的插件有问题。短代码返回一个包含有效HTML的字符串,但一些主题似乎操纵了短代码返回的HTML,我真的不明白原因是什么。例如,这是我的短代码的正确输出:<div class=\"tile\"> <a> <img src=\"0.jpg\" /> <div class=\"caption\"> <p>Kate</p> </div&