function myShortcode(){
return 'test';
}
add_shortcode( 'tracking', 'myShortcode' );
如果我把链接放到这样的内容:
<a href="http://example.com/?tracking=[tracking]">Tracking link</a>
它会返回跟踪信息的链接,例如:http://example.com/?tracking=test(正确)
但是当我在iframe中使用它时
<iframe src="http://example.com/iframe/?tracking=[tracking]"></iframe>
它返回内部链接如下:http://example.com/iframe/?tracking=[tracking](错误 - 缺少'test'值)
答案 0 :(得分:1)
这是因为你做错了。
注册短代码后,您必须使用<iframe src="http://example.com/iframe/?tracking=<?php echo do_shortcode( '[bradford]' ); ?>"></iframe>
功能将该短代码显示为输出。
如果您使用iframe或锚文本作为普通html,请尝试这样。
do_shortcode
我不确定为什么anchort文本显示正确的输出。这很奇怪。
无论如何,如果您使用wp_editor
输出短代码,那么它将适用于每个地方。
有关详情do_shortcode
,请参阅此处<强> 更新 强>
我看到您在add_filter( 'wp_kses_allowed_html', 'wpse_allow_iframe_kses_html',1,1 );
function wpse_allow_iframe_kses_html( $allowedposttags ) {
// Here add tags and attributes you want to allow
$allowedposttags['iframe']=array(
'align' => true,
'width' => true,
'height' => true,
'frameborder' => true,
'name' => true,
'src' => true,
'id' => true,
'class' => true,
'style' => true,
'scrolling' => true,
'marginwidth' => true,
'marginheight' => true,
'allowfullscreen' => true,
);
return $allowedposttags;
}
上以这种方式尝试了您的短代码。无论如何,我不会这样做。但是你可以看到它在锚链接上工作但不在iframe上,实际上iframe总是特殊情况,一些WordPress如何在iframe上处理这个。
经过一番研究后,我为此解决了问题,实际上如果你打开wp-includes / kses.php,那么你会发现一些关于它的提示。默认情况下,WordPress不允许使用krame中的iframe允许HTML列表。也许这就是为什么它不能正常工作但是锚文本在该列表中是允许的,这就是为什么它能够完美地工作。
因此,您必须使用wp_kses_allowed_html()
来允许iframe{{1}}
现在你可以看到不同的了。
希望它对你有所帮助。