我已经创建了一个自定义的短代码,它将类别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界面中的值。
最合适的回答,由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\');