2011-10-12 11 views
2

特定のページでis_active_widgetをチェックするソリューションを探しています。
私はこれを持っていますhttps://wordpress.stackexchange.com/questions/2302/loading-scripts-only-if-a-particular-shortcode-or-widget-is-present

しかし、実行中/アクティブなページに特定のアクティブなウィジェットが存在しないすべてのページにsorich87のウィジェットのスクリプトが読み込まれます。各ページのサイドバーに異なるIDがある場合でも&という名前です。

例:
「X」アクティブなウィジェットとx_scriptを含むページ 'A'(サイドバー 'A1'付き)があります。 その後、 'B'(サイドバー 'B1'付き)をチェックしても 'X'ウィジェットではありませんが、 'X'ウィジェットのx_scriptsは読み込まれます。このis_active_widget関数は、実行中のページではなく、一般的にアクティブになっているウィジェットのみをチェックしているようです。

アクティブ/ランニングページでis_active_widgetを取得する方法は? - wordpress function

これは私のコードです:

class X extends WP_Widget 
{ 
     function X(){ 
      $widget_ops = array('description' => 'X widget'); 
      $control_ops = array('width' => 200, 'height' => 500); 
      parent::WP_Widget(false,$name='X-widget',$widget_ops,$control_ops); 

      if (is_active_widget(false, false, $this->id_base, true)){ 
       add_action('wp_head', 'x_styles',0); 
       add_action('wp_footer', 'x_scripts'); 
      } 
     } 

    //rest of functions here 
} 

これを防ぐには?

答えて

0

はい、is_active_widget()は、データベースに保存されたオプションから値を取得します。したがって、アクティブなすべてのウィジェットに対してtrueを返します。 is_active_sidebar()は同じ動作をします。サイドバーが特定のページに読み込まれていなくても、サイドバーが登録されている限り、返される値は常にtrueになります。

両方の機能は、register_sidebar()から生成された値とサイドバーに追加されたウィジェットのグローバル$wp_registered_widgets$_wp_sidebars_widgets$sidebars_widgetsをチェックします。

残念ながら、これには回避策はありません。 dynamic_sidebar()wp_head()の後に読み込まれているため、条件付きでスクリプトやスタイルシートをフックすることは不可能です。ウィジェットが非アクティブでない限り、wp_headに接続しているスクリプトやスタイルなどは、常にサイドバーがロードされているかどうかはわかりません。

論理的には、wp_footer()にスクリプトを追加する可能性があります。この場合、グローバル変数を設定したり、ウィジェット機能で定数を定義することができます。したがって、スクリプトはウィジェットがアクティブな場合にのみロードされます。

まあ、私の2セント

0

私はこの問題の最も簡単な解決策は、単にサイドバーが自分自身をウィジェット編集することだと思うがあります。プラグインファイルにwp_enqueue_script() & wp_enqueue_style()を使用すると、別のウィジェットが表示されているページでのみロードされます。

関連する問題