在获取模板部件中使用快捷码属性

时间:2021-09-02 作者:Maria

嗨,伙计们,我正在做一个自定义的短代码,客户端可以在其中设置自定义分类并显示在我的侧边栏中

我想使用模板使用get_template_part 但我不知道分类学的术语

我使用以下代码来显示短代码

function cat_widgets( $atts ) {
    ob_start();
    get_template_part(\'templates/show-taxonomy\');
    return ob_get_clean();
} 
add_shortcode( \'cat_widgets\', \'cat_widgets\' );

add_filter( \'widget_text\', \'do_shortcode\' );
在show分类中。php我的代码是

<?php
    $atts = shortcode_atts( array(
        \'custom_taxonomy\' => \'\',
    ), $atts, \'atributes\' );
    $terms_categorias = get_terms([
        \'taxonomy\' => $atts[\'custom_taxonomy\'],
        \'hide_empty\' => false,
        \'orderby\' => \'term_id\',
        \'order\' => \'ASC\' 
    ]);
    ?>
    
    <ul class="product-categories">
        <?php foreach($terms_categorias as $term): ?>
            <li class="cat-item">
                <a href="<?php echo esc_url( get_term_link($term) ); ?>">
                    <?php echo esc_html($term->name); ?>
                </a>
            </li>
        <?php endforeach; ?>
    </ul>
    
我还尝试在de ob\\u start()之后将ATT和术语放在shortcode中;但回报是一样的

有什么我遗漏的吗?

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

这个$atts 在模板部件中(templates/show-taxonomy.php) 您传递给的shortcode_atts()未定义,因此需要通过third parameter 对于get_template_part() 像这样:

get_template_part( \'templates/show-taxonomy\', \'\', array( \'atts\' => $atts ) );
然后在模板部分,使用$args[\'atts\'] 要访问快捷码参数,请执行以下操作:

$atts = shortcode_atts( array(
    \'custom_taxonomy\' => \'\',
), $args[\'atts\'], \'atributes\' ); // here, use $args[\'atts\'] and not $atts
实际上,在上面shortcode_atts() 调用时,第三个参数应为cat_widgets (即第1个参数add_shortcode()) 而不是atributes. :)

相关推荐

Shortcode not being executed

我将以下代码放在WP“init”回调中(或加载插件时)。add_shortcode(\'my_shortcode\', function($atts, $content =\'\') { die(); } ); if (!shortcode_exists(\'my_shortcode\')) die(); 在我的页面中,我放入“[my_shortcode]“”当我查看页面时,我得到“****”知道我的代码怎么了吗?更