IFrames使用自定义短码时,ACF和Elementor仅呈现备用短码

时间:2019-08-26 作者:Akhil

这是一个非常具体和奇怪的问题,现在真的困扰着我。

这是设置
-我正在使用Elementor Pro,我创建了一个单页模板
-我在页面上有四个连接到ACF文本字段的快捷码小部件
-ACF文本字段将来自airtables的iframe的短代码源作为参数(例如[airtable view if=\'src xxx\')。我创建了短代码函数并将其添加为插件。这可以正常工作(代码如下)

问题是这个。

当我将四个短代码直接粘贴到模板中时,它们都会在最后一页中正确呈现。但当我使用ACF并将完全相同的短代码添加到相应的字段中时,只会渲染第一个和第三个IFrame。忽略第二个和第三个元素(即使我使用检查器进行检查,元素也不存在)。类似地,如果移除第一个字段,则仅渲染第二个和第四个字段。如果删除第二个,则仅渲染第三个(跳过第四个)。最后,如果三个都被移除,只有第四个存在,第四个会被渲染,但之后的所有内容都不会被渲染。

我已经尝试了我所知道的一切来找出问题所在,但我认为这与Wordpress或elementor从模板中呈现页面的方式有关。我试图通过在另一个模板页面上创建四个短代码窗口小部件来隔离问题,并执行相同的操作,而这个问题就发生了。这看起来像是一些异步问题,我真的不知道它是如何工作的。如果有人能找到答案,我们将不胜感激。调试日志不会报告与此相关的任何内容。

这是我的短代码回调(它被用作插件)。

function shortcodeToIframe($atts){

        $iframe = shortcode_atts(array(\'if\' => \'Default\'), $atts);
        $html =  \'<div class = "airtable-view">\' .\'<iframe class="airtable-embed"\'. $iframe[\'if\'] . \'</iframe>\' . \'</div>\';
        return $html;
}


add_shortcode(\'airtable-view\', \'shortcodeToIframe\');
我使用的快捷码是

[airtable-view if = \'src = "https://airtables...">\']

2 个回复
最合适的回答,由SO网友:Antti Koskinen 整理而成

没有显示的iframe可能是由于您如何将参数传递给shortcode解析器而导致的。我测试了你的代码示例/短代码(在帖子内容中添加了4次),结果如下:,

<div><iframe class="airtable-embed" &#8217;src<="" iframe=""></div>
<div class = "airtable-view"><iframe class="airtable-embed"&#8217;src</iframe>
最好按照以下方式格式化您的短代码回调函数,

function shortcodeToIframe($atts){

  $default = array(
    \'src\' => \'\',
  );
  $atts = shortcode_atts( $default, $atts );

  if ( ! $atts[\'src\'] ) {
    return;
  }

  return sprintf(
    \'<div class="airtable-view"><iframe class="airtable-embed" src="%s"></iframe></div>\',
    esc_url( $atts[\'src\'] )
  );

}
然后使用这样的短代码,

[airtable-view src="http://www.domain.com"]
这将使参数显式,并且不会有额外的引号、双引号或等号来混淆短代码解析器。

SO网友:Mr Sonnentag

作为一种变通方法,您可以使用Elementor Shortcode小部件,例如此iFrame Shortcode插件:https://de.wordpress.org/plugins/iframe/

然后,在Elementor模板中,使用Shortocode小部件的before和after参数以及自定义字段,如下所示:

前:[iframe src=”后:““宽度=”100%“高度=”500“]

在自定义字段中,在后端仅放置iFrame Url。

请参见此处的屏幕截图:enter image description here

备选方案:使用Crocoblock中继器字段,可能有iframe输出:https://crocoblock.com/knowledge-base/articles/jetengine-dynamic-repeater-widget-overview/

有点离题(与iFrame无关):这真的很强大,例如,我根据用户配置文件页面中的用户名获得了动态Instagram帖子。

相关推荐

YouTube IFRAME嵌入不断从页面上消失

我正在尝试在我的主页上嵌入视频。我从YouTube添加嵌入代码,并将其粘贴到gutenberg编辑器上的自定义html博客中。我点击更新并查看我的网站,视频就在那里。我刷新页面,视频就会消失。我转到页面编辑器,视频的嵌入代码已被删除。有人能告诉我为什么会这样吗?我曾尝试在网上进行研究,但这是5年前的文章,回复不起作用。谢谢