iframe 中的简码 url

Shortcode in iframe url

我试图在 iframe 和 links url 中使用短代码进行跟踪,但 iframe 忽略了短代码。有人可以帮我吗?谢谢!
我有这样的简码功能:

function myShortcode(){
  return 'test';
}
add_shortcode( 'tracking', 'myShortcode' );

如果我把 link 放到这样的内容中:

<a href="http://example.com/?tracking=[tracking]">Tracking link</a>

it returns link 跟踪信息如下:http://example.com/?tracking=test(正确)

但是当我像这样在 iframe 中使用它时

<iframe src="http://example.com/iframe/?tracking=[tracking]"></iframe>

它 return link 里面是这样的:http://example.com/iframe/?tracking=[tracking](不正确 - 缺少 'test' 值)

那是因为你做错了

注册您的简码后,您必须使用 do_shortcode 函数将该简码显示为输出。

如果您将 iframe 或锚文本用作纯文本 html,请尝试这样。

<iframe src="http://example.com/iframe/?tracking=<?php echo do_shortcode( '[bradford]' ); ?>"></iframe>

而且我不确定为什么锚文本显示正确的输出。那真是怪了。

无论如何,如果您使用 do_shortcode 输出您的短代码,那么它将在任何地方都有效。

查看此处了解更多信息do_shortcode

已更新

我看到你在 wp_editor 上用这种方式尝试了你的简码。无论如何,我不会这样做。但是你可以看到它在锚点上工作 link 而不是在 iframe 上,实际上 iframe 总是特殊情况,WordPress 无法在 iframe 上处理这个。

经过一些研究我找到了解决方案,实际上如果你打开 wp-includes/kses.php 然后你会发现一些关于它的提示。 WordPress 默认不允许 kses 允许 HTML 列表中的 iframe。也许这就是它无法正常工作的原因,但该列表中允许使用锚文本,这就是它可以完美工作的原因。

因此您必须使用 wp_kses_allowed_html()

允许 iframe
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;

}

现在你可以看到不一样了。

希望对你有帮助。