在短码函数的输出中处理PHP/HTML

时间:2019-05-21 作者:tommycopeland

我不确定我做错了什么,但我的自定义短代码的输出没有在页面的前端生成。我需要从shortcode函数的输出代码中加载脚本。

function superForms ($atts) {
 $atts = shortcode_atts (array (
   \'id\' => \'\',
    ), $atts );
 return \'<div id=\'. $atts[\'id\'] .\'></div>
    <link rel="stylesheet" media="screen" href="https://assets.sokt.io/superform/superform.css" />
    <script>
        window.superformIds = [\'. $atts[\'id\'] .\'];
    </script>
    <script src="https://assets.sokt.io/superform/superform.js"></script>\';}
add_shortcode ( \'superform\', \'superForms\');
我的短代码是[超格式id=Htgm5],它是需要插入到DIV标识符中的id,位于窗口脚本代码的括号内。超级表单。

但它没有在前端显示。非常感谢您的帮助!谢谢

1 个回复
最合适的回答,由SO网友:MikeNGarrett 整理而成

这基本上工作正常。您可能希望在window.superformIds 数组以确保它是字符串。

这是一种糟糕的方式。对于脚本和样式,您希望避免将它们直接输出到页面上放置快捷码的位置。

这里有一个更好的方法:

add_action( \'wp_enqueue_scripts\', \'my_enqueue_scripts\' );
function my_enqueue_scripts() {
    wp_register_style( \'superform\', \'https://assets.sokt.io/superform/superform.css\', array(), \'1.0.0\', \'screen\' );
    wp_register_script( \'superform\', \'https://assets.sokt.io/superform/superform.js\', array( \'jquery\' ), \'1.0.0\', true );
}


function superForms( $atts ) {
    $atts = shortcode_atts(
        array(
            \'id\' => \'\',
        ),
        $atts
    );
    wp_enqueue_script( \'superform\' );
    wp_enqueue_style( \'superform\' );
    wp_localize_script( \'superform\', \'superformIds\', array( $atts[\'id\'] ) );
    return \'<div id="\' . $atts[\'id\'] . \'"></div>\';
}
add_shortcode( \'superform\', \'superForms\' );
这将提前注册脚本和样式,允许您在调用快捷码时将它们排队。这可以防止向页面添加多个脚本,因为将某个脚本排队两次只会包含一次。

您还可以为脚本指定依赖项之类的内容。看起来superform需要jQuery。

最后,您可以本地化脚本,该脚本将关联的ID传递给DOM,并使其可用于脚本。

注意,superforms假设jQuery设置为$. 你也需要处理这个问题。