嗨,伙计们,我正在做一个自定义的短代码,客户端可以在其中设置自定义分类并显示在我的侧边栏中
我想使用模板使用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中;但回报是一样的
有什么我遗漏的吗?
最合适的回答,由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
. :)