停用插件短码中的JS脚本

时间:2016-09-28 作者:theyuv

我正在使用一个插件,该插件将javascript文件放入其一个短代码函数(我在页面上运行)中。

我不想加载此文件。

所以我试着用wp_dequeue_script 在我的functions.php 但这不起作用。

也许是我的functions.php 在页面中的短代码之前加载文件?我怎样才能避开这个问题?

快捷码功能:

global $dwqa, $dwqa_sript_vars, $script_version;
ob_start();

$dwqa->template->remove_all_filters( \'the_content\' );

echo \'<div class="dwqa-container" >\';
dwqa_load_template( \'question\', \'submit-form\' );
echo \'</div>\';
$html = ob_get_contents();

$dwqa->template->restore_all_filters( \'the_content\' );

ob_end_clean();
wp_enqueue_script( \'jquery-ui-autocomplete\' );
wp_enqueue_script( \'dwqa-submit-question\', DWQA_URI . \'templates/assets/js/dwqa-submit-question.js\', array( \'jquery\', \'jquery-ui-autocomplete\' ), $script_version, true );
wp_localize_script( \'dwqa-submit-question\', \'dwqa\', $dwqa_sript_vars );
return $this->sanitize_output( $html );
我如何才能不加载此特定js 文件

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

评估短代码时,站点的标题已经组装好。所以如果短码想要enqueue a script 必须在页脚中执行此操作(通过将最后一个参数设置为wp_enqueue_scripttrue.

此时,阻止文件实际包含在页脚中还为时不晚。通常,在functions.php 您可以将脚本排队或(取消)注册到after_setup_theme 钩但是,如果您查看order in which actions are executed 您可能会在脚本进入队列之前很久就尝试取消其注册。

因此,您必须找到一个钩子,该钩子在短代码将脚本排入队列后激发。合乎逻辑的选择是wp_footer, 像这样:

add_action (\'wp_footer\',\'wpse240803_deregister_dwqa\');
function wpse240803_deregister_dwqa() {
  wp_deregister_script (\'dwqa-submit-question\');
  }