我有一段代码,
add_shortcode( \'parent-child\', \'taxonomy_hierarchy\' );
function taxonomy_hierarchy( $atts ){
extract( shortcode_atts( array(
\'link\' => true,
\'taxonomy\' => \'property_city\'
), $atts, \'parent-child\' ) );
global $post;
$terms = wp_get_post_terms( $post->ID, $taxonomy );
/* You can pass conditions here to override
* $link based on certain conditions. If it\'s
* a single post, current user is editor, etc.
*/
ob_start();
foreach( $terms as $term ){
if( $term->parent != 0 ){
$parent_term = get_term( $term->parent, $taxonomy );
echo ($link != false) ? sprintf( \'<a href="%s">%s</a>, \', esc_url( get_term_link($parent_term) ), $parent_term->name ) : "{$parent_term->name}, " ;
}
echo ($link != false) ? sprintf( \'<a href="%s">%s</a>\', esc_url( get_term_link($term) ), $term->name ) : $term->name ;
}
return ob_get_clean();
}
这将允许您获得以下结果:用法
**[parent-child]**
• <a href="#">New York</a>
• <a href="#">New York</a>, <a href="#">Manhattan</a>
**[parent-child link="true"]**
• <a href="#">New York</a>
• <a href="#">New York</a>, <a href="#">Manhattan</a>
**[parent-child link="false"]**
• New York
• New York, Manhattan
[parent-child link="false" taxonomy="some_other_taxonomy"]
• Top Level Term
• Top Level Term, Child Level Term
一切正常,显示如期!只是我的参数不起作用。
我没能得到[parent-child link="false"] 工作在我研究短代码如何工作的过程中,我遇到了这些帖子,
link1link2link3
他们都说从不使用extract 和echo 在短代码中,wordpress代码和使用$atts 和$return 相反
这让人怀疑这一准则的有效性。。。
My question now is : 如何制作此短代码[parent-child] working with link=false , 并且在短代码中没有提取和回显。
谢谢你,如果你understood what i\'m talking about 知道如何让它更respectful of wordpress standards
最合适的回答,由SO网友:Shazzad 整理而成
如何使此短代码[父-子]与link=false一起工作,并且在短代码中不进行提取。
您永远不能将布尔值作为shortcode参数传递,而应该将其视为字符串。你对参数的比较link
价值false
应用作\'false\'
(字符串)。
add_shortcode( \'parent-child\', \'taxonomy_hierarchy\' );
function taxonomy_hierarchy( $atts ){
// Don\'t extract, rather parse shortcode params with defaults.
$atts = shortcode_atts( array(
\'link\' => \'true\',
\'taxonomy\' => \'property_city\'
), $atts, \'parent-child\' );
// Check the $atts parameters and their typecasting.
var_dump( $atts );
global $post;
$terms = wp_get_post_terms( $post->ID, $atts[\'taxonomy\'] );
/* You can pass conditions here to override
* $link based on certain conditions. If it\'s
* a single post, current user is editor, etc.
*/
ob_start();
foreach( $terms as $term ){
if( $term->parent != 0 ){
$parent_term = get_term( $term->parent, $taxonomy );
if ($atts[\'link\'] !== \'false\') {
printf( \'<a href="%s">%s</a>, \', esc_url( get_term_link($parent_term) ), $parent_term->name );
} else {
echo $parent_term->name . \', \';
}
}
if ($atts[\'link\'] !== \'false\') {
printf( \'<a href="%s">%s</a>\', esc_url( get_term_link($term) ), $term->name );
} else {
echo $term->name;
}
}
return ob_get_clean();
}
短代码中无回声
这不是关于使用echo
, 要求您不要在短代码内回显输出。相反,您应该返回它,因为WordPress将用您的输出值替换shortcode。在这里,您使用ob_start()
和ob_get_clean()
函数并返回它。这很好,是常用的技术。