我有一个适用于用户定义的社交媒体按钮的快捷码,除了div超出其边界之外,这意味着如果在小部件中调用此快捷码,则以下小部件也包含在快捷码的div&;特定于短代码的样式会影响以下小部件。我认为发生的事情可能类似于this thread 但我不确定我哪里出错了,因为我没有回应这段代码中的任何内容。
如果短代码放在最后,它工作得很好,但这不是很好的用户体验,是吗?
这是我的代码:
<?php
function smb_function( $atts ) {
?> <div class="social_button_shortcode"><?php
$smb = array(\'fb\', \'ig\', \'tw\', \'pi\', \'li\', \'et\', \'fl\', \'rd\', \'tu\', \'gr\', \'yt\', \'sn\', \'em\');
$smb_url = array();
foreach ( $smb as $index => $site ) {
$thisURL = get_theme_mod ( \'themeslug_\' . $site . \'_url\', \'\');
if ( $thisURL != \'\' ) {
$smb_url[$site] = $thisURL;
if ( $site == \'em\' ) { if ( strncasecmp($smb_url[$site],"mail",4) and $smb_url[$site] != \'\' ) { $smb_url[$site] = "mailto:" . $smb_url[$site]; } }
if ( $site != \'em\' and ( strncasecmp($smb_url[$site],"http",4) and $smb_url[$site] != \'\' ) ) { $smb_url[$site] = "https://" . $smb_url[$site]; }
}
}
$smb_img = array(
\'fb\' => $smb_dir . \'class="fab fa-facebook-f"\',
\'tw\' => $smb_dir . \'class="fab fa-twitter"\',
\'rd\' => $smb_dir . \'class="fab fa-reddit-alien"\',
\'em\' => $smb_dir . \'class="far fa-envelope"\',
\'et\' => $smb_dir . \'class="fab fa-etsy"\',
\'fl\' => $smb_dir . \'class="fab fa-flickr"\',
\'ig\' => $smb_dir . \'class="fab fa-instagram"\',
\'li\' => $smb_dir . \'class="fab fa-linkedin-in"\',
\'pi\' => $smb_dir . \'class="fab fa-pinterest-p"\',
\'gr\' => $smb_dir . \'class="fab fa-goodreads-g"\',
\'sn\' => $smb_dir . \'class="fab fa-snapchat-ghost"\',
\'tu\' => $smb_dir . \'class="fab fa-tumblr"\',
\'yt\' => $smb_dir . \'class="fab fa-youtube"\',
);
if ( count($smb_url) > 0 ) {
foreach($smb_url as $index => $site ){
$return_string .= \'<div class="smbwrap">\';
$return_string .= \'<a target="_blank" href="\' . $smb_url[$index] . \'"><i \' . $smb_img[$index] . \'></i></a>\';
$return_string .= \'</div>\';
}
return $return_string;
}
?></div>
<?php
}
add_shortcode(\'socialbuttons\', \'smb_function\');
?>
是的,我意识到在一个主题中添加短代码并不一定是普巴斯人所认可的,但这里发生冲突的可能性非常低。
SO网友:Tom J Nowell
因为我没有回应代码中的任何内容。
但你是!此代码:
function smb_function( $atts ) {
?> <div class="social_button_shortcode"><?php
与以下内容相同:
function smb_function( $atts ) {
echo \' <div class="social_button_shortcode">\';
与结尾处的结束div标记类似。
Any form of direct output in a shortcode will break it, 是否通过
echo
,
print
,
printf
, 或其他可湿性粉剂功能。
短代码还打破了短代码应该返回其内容的规则,因为它只在if ( count($smb_url) > 0 ) {
是真的。但如果这不是真的呢?请注意,由于return
.
例如,此短代码的输出是什么:
add_shortcode( \'blank\', function() {} );
这相当于:
add_shortcode( \'blank\', function() { return NULL; } );
还有这个:
add_shortcode( \'blank\', function() { echo "Hello World!"; return NULL; } );
所有3个短代码都生成空值。
如果绝对必须直接输出,请使用输出缓冲区捕获它并将结果分配给变量。
提示:typehint将shortcode函数作为返回字符串的函数,如果不返回字符串,则会使其更加明显