这是一个非常具体和奇怪的问题,现在真的困扰着我。
这是设置
-我正在使用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...">\']
最合适的回答,由SO网友:Antti Koskinen 整理而成
没有显示的iframe可能是由于您如何将参数传递给shortcode解析器而导致的。我测试了你的代码示例/短代码(在帖子内容中添加了4次),结果如下:,
<div><iframe class="airtable-embed" ’src<="" iframe=""></div>
<div class = "airtable-view"><iframe class="airtable-embed"’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"]
这将使参数显式,并且不会有额外的引号、双引号或等号来混淆短代码解析器。