在php模板中嵌入快捷码

时间:2015-12-07 作者:rudtek

我使用的插件有短代码。它被称为根据短代码

[accordion]
[accordion-item title="Title of accordion item"]Drop-down content goes here.[/accordion-item]
[accordion-item title="Second accordion item"]Drop-down content goes here.[/accordion-item]
[/accordion]
我想把它放在wp\\u查询中,但我似乎不知道如何嵌套短代码。有人能帮忙吗<这是我已经尝试过的:

<?php echo do_shortcode (\'[accordion]\'); ?>  
                <?php                                                     
                    $args = array(
                                    \'posts_per_page\' => \'-1\',
                                    \'post_type\' => \'post\',
                                    \'post_status\' => \'publish\',
                                    \'category__in\' => $quicksand_categories 
                                    );                     
                    $query = new WP_Query( $args );                                             
                    foreach ($query->posts as $item) {                      
                        $categories = wp_get_post_categories($item->ID);
                        ?>
    <?php echo do_shortcode (\'[accordion-item title="\'.get_the_title($item->ID).\'"]\'.the_content().\'[/accordion-item]\'); ?>                   

                    <?php  }  ?>
<?php echo do_shortcode (\'[/accordion]\'); ?>

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

我认为应该这样:

<?php $output = \'[accordion]\'; ?>  
            <?php                                                     
                $args = array(
                                \'posts_per_page\' => \'-1\',
                                \'post_type\' => \'post\',
                                \'post_status\' => \'publish\',
                                \'category__in\' => $quicksand_categories 
                                );                     
                $query = new WP_Query( $args );                                             
                foreach ($query->posts as $item) {                      
                    $categories = wp_get_post_categories($item->ID);
                    ?>
<?php $output.=\'[accordion-item title="\'.get_the_title($item->ID).\'"]\'.the_content().\'[/accordion-item]\'; ?>                   

                <?php  }  ?>
<?php $output .= \'[/accordion]\'; ?>
<?php echo do_shortcode($output); ?>

SO网友:Mark Chitty

在模板中使用打开/关闭短代码的另一种方法,它不需要大量的字符串串联:

<?php
// Buffer the output so that we can use [shortcodes][/shortcodes]
ob_start();
?>

<h1>A stylish template</h1>
[my_whizzy_shortcode param="awesome"]
<p><?= the_content() ?></p>
<div>More template html, php tags, etc</div>
[/my_whizzy_shortcode]

<?php
// Now write out the template, including the parsed shortcodes
echo do_shortcode(ob_get_clean());
?>

相关推荐

Namespaced shortcode?

我正在改造一个旧的WP站点,该站点有许多自定义的短代码,显然由于代码当前的组织方式,这些短代码在性能方面付出了代价。当然,我可以修复优化不好的代码,使用十几个短代码,并且一天就可以完成,但我想知道如何更好地组织它们。根据WordPress\'documentation, 建议将它们放在插件中并在上初始化init. 我们可以通过这样“命名”它们来减少这个钩子中的负载吗?[com.company shortcode attr=\"attr\" prop=\"prop\"] 有人尝试过这样的解决方案吗