使用REMOVE_ACTION在不必要的页面上注销脚本

时间:2013-10-03 作者:Alexander

To all would-be close-voters: 这个问题不是重复的,因为我需要使用删除插件添加的所有脚本remove_action.

在里面Very stubborn wp_register_script / add_action vs remove 习惯于wp_dequeue_script 函数一个接一个地删除脚本,但我需要将它们全部删除(这是使用插件添加的add_action) 使用remove_action!

wp_dequeue_script 函数无法删除如下自定义代码:

add_action(\'wp_head\', \'print_style\');

function print_style() {
    echo \'<style>body { margin: 0; }</style>\';
}
我已经安装了WP Polls插件。我在一些页面中使用它,需要在其他页面取消注册它的样式和脚本。

我在插件中找到了一些注册脚本的代码:

功能:排队轮询JavaScripts/CSS

add_action(\'wp_enqueue_scripts\', \'poll_scripts\');
function poll_scripts() {
    // code
}
因此,为了注销其脚本,我在函数中使用了下一个代码。php:

add_action( \'wp_enqueue_scripts\', \'deregister_polls_scripts_and_styles\' );

function deregister_polls_scripts_and_styles() {
    if ( is_home() ) {
        remove_action( \'wp_enqueue_scripts\', \'poll_scripts\');
    }
}
所以它必须注销主页上的轮询脚本,但id并没有。我做错了什么?

P.S. 1

在这种情况下,脚本正在删除:

add_action( \'after_setup_theme\', \'wc_deregister_polls_scripts_and_styles\' );

function wc_deregister_polls_scripts_and_styles() {
    remove_action(\'wp_enqueue_scripts\', \'poll_scripts\');
    remove_action(\'wp_head\', \'poll_head_scripts\');
}
但我需要在以下页面上删除它:

add_action( \'after_setup_theme\', \'wc_deregister_polls_scripts_and_styles\' );

function wc_deregister_polls_scripts_and_styles() {
    if ( is_page(\'developers\') ) {
        remove_action(\'wp_enqueue_scripts\', \'poll_scripts\');
        remove_action(\'wp_head\', \'poll_head_scripts\');
    }
}
所以在这种情况下,它不起作用。

我已经安装了另一个插件,在这种情况下一切正常。相同的操作,但都有效:

add_action( \'wp_enqueue_scripts\', \'wc_deregister_scripts_and_styles\' );

function wc_deregister_scripts_and_styles() {
    if ( !is_home() && !is_tax(\'brand\') ) {
        remove_action( \'wp_enqueue_scripts\', \'uag_frontend_styles\', 999 );
        remove_action( \'wp_footer\', \'uag_footer_scripts\');
    }
}

P. S. 2

这是另一个插件。

add_action(\'wp_enqueue_scripts\', \'uag_frontend_styles\', 999);
function uag_frontend_styles() {

    /* main stylesheet */
    wp_register_style( \'uag_style\', uag_url . \'css/uag.css\');
    wp_enqueue_style(\'uag_style\');
    }
这是民意测验:

add_action(\'wp_enqueue_scripts\', \'poll_scripts\');
function poll_scripts() {
    global $text_direction;
    if(@file_exists(get_stylesheet_directory().\'/polls-css.css\')) {
        wp_enqueue_style(\'wp-polls\', get_stylesheet_directory_uri().\'/polls-css.css\', false, \'2.63\', \'all\');
    } else {
        wp_enqueue_style(\'wp-polls\', plugins_url(\'wp-polls/polls-css.css\'), false, \'2.63\', \'all\');
    }
    if(\'rtl\' == $text_direction) {
        if(@file_exists(get_stylesheet_directory().\'/polls-css-rtl.css\')) {
            wp_enqueue_style(\'wp-polls-rtl\', get_stylesheet_directory_uri().\'/polls-css-rtl.css\', false, \'2.63\', \'all\');
        } else {
            wp_enqueue_style(\'wp-polls-rtl\', plugins_url(\'wp-polls/polls-css-rtl.css\'), false, \'2.63\', \'all\');
        }
    }
    $poll_ajax_style = get_option(\'poll_ajax_style\');
    $pollbar = get_option(\'poll_bar\');
    wp_enqueue_script(\'wp-polls\', plugins_url(\'wp-polls/polls-js.js\'), array(\'jquery\'), \'2.63\', true);
// Other same code
}

2 个回复
SO网友:gmazzap

一个动作可以在经过的时间内删除,因为它被添加到该动作中并被触发。因此,在添加之后,在激发之前。

您说插件有以下代码:

add_action(\'wp_enqueue_scripts\', \'poll_scripts\');

function poll_scripts() {
    // code
}
但你不能说这段代码是否在某个钩住的函数中。

如果是的话not 在任何函数中,一旦加载插件,就会添加该操作,因此您(在加载主题之前)可以从主题中执行该操作,您可以在之前的任何地方删除该操作wp_head(), 您在主题上可用的第一个挂钩是after_setup_theme,

所以这一个会起作用:

add_action(\'template_redirect\', \'remove_poll_scripts\');

function remove_poll_scripts() {
  if ( is_home() ) remove_action(\'wp_enqueue_scripts\', \'poll_scripts\');
}
如果在您的functions.php 你只要写

remove_action(\'wp_enqueue_scripts\', \'poll_scripts\');
它会起作用,因为functions.php 在插件之后加载,在插件之前加载\'wp_enqueue_scripts\' 被触发:因此您非常及时,但无法检查在哪个页面中删除脚本。

此外,如果您尝试从插件中执行完全相同的操作,并在插件文件中编写

remove_action(\'wp_enqueue_scripts\', \'poll_scripts\');
如果不将其包装在任何挂钩中,它可能会失败:没有人能保证在添加脚本的插件之前没有加载插件,在这种情况下,您会尝试在添加之前删除操作。

SO网友:Imperative Ideas

这里只是一个想法——试着把行动的优先顺序往后移。如果没有优先级,它将默认为10,与原始注册相同。由于子主题的工作方式,这意味着您要在注册/排队发生之前启动注销器。

add_action( \'wp_enqueue_scripts\', \'deregister_polls_scripts_and_styles\', 99 );

结束

相关推荐

Custom Post Row Actions

我偶然发现this question 在写这个问题的时候。我有一个问题是关于这个问题的。我发现你用的是get_delete_post_link 筛选为我的操作创建一个新的url(或一个类似的函数——在任何情况下,我都会将该函数与布尔值一起使用)。唯一的问题是,I don\'t know how to capture the event now. 考虑到我在谷歌上找不到很多关于行后操作的例子,我将不胜感激-/public function _wp_filter_get_delete_post_link( $