如何创建自定义快捷代码的另一个实例

时间:2016-04-07 作者:albpower

我已经创建了一个自定义的短代码,它将类别slug和帖子数量作为参数,并使用WP\\u查询创建一个循环,并从db输出帖子。但我不能多次使用它,因为类别段塞是不同的,而且我已经将短代码映射到visual composer插件中,但在前端,短代码输出在visual composer列div之外。

这是我的短代码:

$postBox_1_attr = shortcode_atts(array(
        \'kategoria\' => \'lajme\',
        \'nr_postimeve\' => 5,
    ),$atts);

    $kategoria = $postBox_1_attr[ \'kategoria\' ];
    $nrPostimeve = $postBox_1_attr[ \'nr_postimeve\' ];

    $sql = new WP_Query( array( 
        \'category_name\' => $kategoria,
        \'posts_per_page\' => 1,
        \'post_status\' => \'publish\'
        ) );


     if ( $sql->have_posts() ) : ?>

    <div class="vc_col-sm-8">
     <div class="box-1">

     <?php while ( $sql->have_posts() ) : $sql->the_post(); ?>
        <div class="headline">
            <?php the_post_thumbnail() ?>

            <a href="<?php the_permalink() ?>">
                <h4> <?php the_title() ?></h4>
                <p> <?php the_excerpt() ?> </p>
            </a>



            <?php
            endwhile;
            wp_reset_postdata();
            endif;
            ?>

        </div> <!-- end featured post -->

        <div class="recentPosts">
        <?php 
            $secondSql = new WP_Query( array( 
            \'category_name\' => $kategoria,
            \'posts_per_page\' => $nrPostimeve,
            \'post_status\' => \'publish\',
            \'offset\' => 1
            ) );

            if ( $secondSql->have_posts() ) : 
            while ( $secondSql->have_posts() ) : $secondSql->the_post(); 
        ?>

            <div class="small-items">

                <div class="thumb">
                    <?php the_post_thumbnail() ?>
                </div>

                <div class="title">
                    <a href="<?php the_permalink() ?>">
                        <h4> <?php the_title() ?></h4>
                    </a>
                </div>

            </div> <!-- end single item -->

    <?php 
         endwhile; 
         wp_reset_postdata();
         endif;
     ?>
          </div> <!-- endSidePosts --> 
     </div> <!-- end BoxLayout -->
     </div>

UPDATE:

我忘了在问题中包括我是从一个单独的。php文件

这是在主题函数中创建短代码的代码和函数。php文件

function postBoxes_1( $atts ){
    include(\'post-layouts/post-box-1.php\'); /* earlier I had include_once and that was the problem */
}

add_shortcode(\'postBox1\',\'postBoxes_1\');
现在唯一的问题是,当我使用作为映射的visual composer快捷代码时,它不会在列div中输出快捷代码。使用原始的shortocode,它工作得很好,但我想让网站版主更容易使用GUI界面中的值。

1 个回复
最合适的回答,由SO网友:albpower 整理而成

好的,这里有我的问题的解决方案,给那些有同样问题的人。

1-第一个问题是我无法在多个实例中使用短代码,这是因为我使用了include_once 在shortcode函数中,而不是include 包括单独的php模板。

2-第二个问题是,当我在输出时在Visual Composer插件中映射我的短代码时,从我的短代码生成的内容在div列之外。

解决方法是在shortcode函数中添加这部分代码。

function postBoxes_1( $atts ){
    ob_start();
    include(\'post-layouts/post-box-1.php\');

    return ob_get_clean();
}

add_shortcode(\'postBox1\',\'postBoxes_1\');

相关推荐

我可以将参数传递给Add_ShortCode()函数吗?

正如标题所述,我需要向add_shortcode() 作用换句话说,我传递的那些参数将在的回调函数中使用add_shortcode(). 我该怎么做?请注意,这些与以下结构无关[shortcode 1 2 3] 哪里1, 2, 和3 是用户传递的参数。在我的情况下,参数仅用于编程目的,不应由用户负责。谢谢