2017-11-22 10 views
0

私は現在、Fooboxライトボックス(フリー)プラグインを使用しています。プラグインのファイルは、使用されているかどうかにかかわらず、すべてのページに読み込まれているようです。しかし、私はこれを変更したいと思いますが、スクリプトをデキューするためのハンドルが見つからないようです。Wordpressデキュースクリプトハンドルなし?

スクリプトは、少なくとも私にはハンドルを表示しないコードの下にあるようです。私はremove_action(...)を使って、それらを "カウンターする"とwp_dequeue_script()のさまざまな入力を試してみました。可能であれば、私は直接プラグインファイルを編集せずにこれらのスクリプト(およびスタイル)をデキューするにはどうすればよい、wp_dequeue_script('foobox.free.min.js')

class Foobox_Free extends Foo_Plugin_Base_v2_1 { 

     const JS     = 'foobox.free.min.js'; 
     const CSS     = 'foobox.free.min.css'; 
     const CSS_NOIE7   = 'foobox.noie7.min.css'; 
     const FOOBOX_URL   = 'http://fooplugins.com/plugins/foobox/?utm_source=fooboxfreeplugin&utm_medium=fooboxfreeprolink&utm_campaign=foobox_free_pro_tab'; 
     const BECOME_AFFILIATE_URL = 'http://fooplugins.com/affiliate-program/'; 

     private static $instance; 

     public static function get_instance() { 
      if (! isset(self::$instance) && ! (self::$instance instanceof Foobox_Free)) { 
       self::$instance = new Foobox_Free(); 
      } 
      return self::$instance; 
     } 

     /** 
     * Initialize the plugin by setting localization, filters, and administration functions. 
     */ 
     private function __construct() { 
      //init FooPluginBase 
      $this->init(FOOBOXFREE_FILE, FOOBOXFREE_SLUG, FOOBOX_BASE_VERSION, 'FooBox FREE'); 

      if (is_admin()) { 

       add_action('admin_head', array($this, 'admin_inline_content')); 
       add_action('foobox-free-settings_custom_type_render', array($this, 'custom_admin_settings_render')); 
       new FooBox_Free_Settings(); 

       add_action(FOOBOX_ACTION_ADMIN_MENU_RENDER_GETTING_STARTED, array($this, 'render_page_getting_started')); 
       add_action(FOOBOX_ACTION_ADMIN_MENU_RENDER_SETTINGS, array($this, 'render_page_settings')); 

       add_action('admin_notices', array($this, 'admin_notice_foogallery_lightboxes')); 
       add_action('wp_ajax_foobox_foogallery_lightboxes_ignore_notice', array($this, 'admin_notice_foogallery_lightboxes_ignore')); 
       add_action('wp_ajax_foobox_foogallery_lightboxes_update', array($this, 'admin_notice_foogallery_lightboxes_update')); 
       add_action('admin_print_scripts', array($this, 'admin_notice_foogallery_lightboxes_inline_js'), 999); 

       add_filter('foobox-free-has_settings_page', '__return_false'); 

      } else { 

       // Render JS to the front-end pages 
       add_action('wp_enqueue_scripts', array($this, 'frontend_print_scripts'), 20); 
       add_action('foobox-free_inline_scripts', array($this, 'inline_dynamic_js')); 

       // Render CSS to the front-end pages 
       add_action('wp_enqueue_scripts', array($this, 'frontend_print_styles')); 

       if ($this->is_option_checked('disable_others')) { 
        add_action('wp_footer', array($this, 'disable_other_lightboxes'), 200); 
       } 
      } 
     } 

編集
私は(すべてのfunctions.phpに追加)私は、スクリプトを削除するためにやってみたものを追加しました下:

add_action('wp_enqueue_scripts', 'remove_foobox_scripts', 100); 

function remove_foobox_scripts() { 
    if (!is_page('my-page')) { 

     wp_deregister_script('foobox.free.min.js'); 
     wp_dequeue_script('foobox.free.min.js'); 
    } 
} 

もちょうどである、以下試してみました

:fooboxファイルから直接コピー: array(一部が除去される

remove_action('wp_enqueue_scripts', array($this, 'frontend_print_scripts'), 20); 
remove_action('foobox-free_inline_scripts', array($this, 'inline_dynamic_js')); 

remove_action('wp_enqueue_scripts', array($this, 'frontend_print_styles')); 

はまた、以下試してみました

remove_action('wp_enqueue_scripts','frontend_print_scripts', 20); 
remove_action('foobox-free_inline_scripts', 'inline_dynamic_js'); 

remove_action('wp_enqueue_scripts', 'frontend_print_styles'); 
+0

どこにコードを挿入して対処しましたか?どのページをロードするべきであるべきかを指定するためにどのようなコードを使用していますか? – miknik

+0

@miknik遅い応答に申し訳ありません。私は元の質問に成功しなかった試行を追加しました –

答えて

1

あなたがこれをやろうとしている方法の問題は、Wordpressで何が起きたかに由来します。

is_page('my-page')などの条件付きタグを使用して、プラグインを読み込むかどうかを判断しています。 Wordpressが現在のクエリのURLを解析し、この時点ですべてのプラグインとテーマが既に読み込まれるまで、これらの条件付きタグは使用可能になりません。条件タグを使わずにURLを自分で解析しても、プラグインがロードされる前にコードが実行されることは確かではありません。

解決策は、コードをmu-pluginとして追加することです。これらのプラグインは通常のプラグインの前にロードされるので、ここでoption (option name)フィルタを使用して、ロードするプラグインを変更することができます。

オプションフィルタは、そのオプションに設定されている値を含む配列を関数に渡します。この場合、フックする場合はoption_active_pluginsです。

print_r(get_option('active_plugins'));を実行するか、ご使用のwordpressのインストールのpluginsフォルダを調べて、使用する値を見つけることができます。

次の例はあなたの質問に固有ですが、多くの条件に基づいて異なるページに複数のプラグインを追加したり削除したりするなど、より包括的なルールセットを作成するために変更できます。

私の機能では、あなたはwp-adminではないことを確認してから2つの条件があります。最初のページでは、指定されたページで通常アクティブなプラグインが無効になり、2番目のページでは、指定されたページで通常無効になっているプラ​​グインが有効になります。ただ、インストールの値を変更するには

<?php 
add_filter('option_active_plugins', 'add_or_remove_plugins'); 
function add_or_remove_plugins($plugins) { 
    if (strpos($_SERVER['REQUEST_URI'], '/wp-admin/') !== 0) { // Disable in admin pages or admin plugin settings stop working properly 
     if (strpos($_SERVER['REQUEST_URI'], '/remove-plugin-here/') === 0) { // Conditonal tags still unavailable so you have to parse urls yourself 
      $k = array_search('foobox-image-lightbox/foobox-free.php', $plugins); // This will stop an active plugin from loading 
      if(false !== $k){ 
       unset($plugins[$k]); 
      } 
     } 
     if (strpos($_SERVER['REQUEST_URI'], '/add-plugin-here/') === 0) { 
      $plugins[] = 'foobox-image-lightbox/foobox-free.php'; // This will load the plugin along with all the active plugins 
     } 
    } 
    return $plugins; 
} 
?> 

は、合わせてファイルに貼り付け、あなたのMU-pluginsフォルダにアップロードし

はJSが間にwp_headに追加されたあなたのインラインように見えるEDIT Foobox_Freeクラスのコンストラクタです。あなたは、あなたのfunctions.phpにこれを追加してみてください:それは多分動作しない場合

add_action('wp_head', 'remove_dynamic_js'); 
function remove_dynamic_js(){ 
    $foo = Foobox_Free::getInstance(); 
    remove_action('wp_head', array($foo, 'inline_dynamic_js')); 
} 

するか、この:

add_action('wp_head', 'remove_dynamic_js'); 
function remove_dynamic_js(){ 
    remove_action('wp_head', array('Foobox_Free', 'inline_dynamic_js')); 
} 

アクションがプライベート関数の内部で追加されたので、私はしないでくださいそれらのいずれかが実際に動作するかどうかを知る。試してみます。私の最初の答えがそうでなければ、プラグインが指定されたページに全くロードされなくなります。

UPDATE

まあ、私は近くにあった...プラグインの作者によって供給されるここで、スクリプトを削除するためのコードです。

$foobox = Foobox_Free::get_instance(); 
remove_action('foobox-free_inline_scripts', array($foobox, 'inline_dynamic_js')); 
+0

実際には自分自身で更新を書くつもりでしたが、プラグインによって読み込まれたスクリプタを次のように登録解除することができました: 'add_action( ' wp_enqueue_scripts '、' remove_foobox_scripts '、100); function remove_foobox_scripts(){ if(!is_page( 'my-page')){ wp_dequeue_script( 'foobox-free-min'); wp_dequeue_style( 'foobox-free-min'); wp_dequeue_style( 'foogallery-core'); } } '。しかし、これはインラインスクリプト 'inline_dynamic_js'を削除しません。 –

+0

後でスクリプトが来るので、条件付きのスクリプトを無効にすることができます。プラグイン全体のロードを停止しようとしていると思いました。 – miknik

+0

ああ、それは明らかではないかもしれない。インラインスクリプトを無効にする方法はありますか?私はさまざまなものを試しましたが、うまく動作しないようです。 –

関連する問題