如果在侧边栏中找到小部件,则插入wp_footer

时间:2014-03-28 作者:B L Praveen

我试图在wp\\u页脚中插入一段代码,无论侧栏中是否有小部件。

如何避免页脚中不必要的代码?

仅当侧栏中存在小部件时添加代码。

 class CustomWidget extends WP_Widget {

   function CustomWidget() { 
     add_action( \'wp_footer\', array($this,\'footer\'), 10, 1 );   
   }

   function widget($args, $instance) { }

   function update( $new_instance, $old_instance ) {}

   function form($instance) {}

   function footer {
      $all_widgets = $this->get_settings();

      foreach ($all_widgets as $key => $wpdcjqverticalmegamenu){

       $widget_id = $this->id_base . \'-\' . $key;

      if(is_active_widget(false, $widget_id, $this->id_base)){

      }     

   }

}

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

小部件的构造函数在小部件注册时调用,因此add_action 在(可能)每个请求上调用。你可以避免这种情况,简单地说add_action 在…内widget() 函数,该函数仅在打印小部件时调用,因此无需检查:只需输出所需内容。

此外,如果您需要footer 方法中使用闭包widget 方法,您可以轻松访问$args$instance 变量(第一个包含关于侧栏和小部件id的信息,第二个包含关于为特定小部件设置的字段的信息):

class CustomWidget extends WP_Widget {

   function __construct() { 
      parent::__construct( \'my-widget-id\', \'My Widget Name\' );
   }

   function widget( $args, $instance ) {

    add_action( \'wp_footer\', function() use ( $args, $instance ) {

      echo \'<h1>\' . $args[\'widget_id\'] . \'</h1>\';
      echo \'<pre>\'; print_r( $instance ); echo \'</pre>\';
      echo \'<pre>\'; print_r( $args); echo \'</pre>\';
      echo \'<hr>\';

    }); 

   }

   function update( $new_instance, $old_instance ) {}

   function form($instance) {}

}
这使得在小部件添加到页面的所有时间都会关闭,即如果小部件添加了3次,则关闭将运行3次。

如果要防止出现这种情况,请使用静态标志:

class CustomWidget extends WP_Widget {

   static $added = 0;

   function __construct() { 
      parent::__construct( \'my-widget-id\', \'My Widget Name\' );
   }

   function widget( $args, $instance ) {

    add_action( \'wp_footer\', function() use ( $args, $instance ) {

      if ( static::$added !== 0 ) return; // run only once;
      static::$added++;

      echo \'<h1>\' . $args[\'widget_id\'] . \'</h1>\';
      echo \'<pre>\'; print_r( $instance ); echo \'</pre>\';
      echo \'<pre>\'; print_r( $args); echo \'</pre>\';
      echo \'<hr>\';

    }); 

   }

   function update( $new_instance, $old_instance ) {}

   function form($instance) {}

}
PHP 4很久以前就死了。请使用PHP 5 constructors...

结束

相关推荐

Individual Widgets per Page

在我的Wordpress网站(仅限于页面,无帖子)中,我需要在侧边栏中放置一些静态blob。我们可以将这些“blob”称为小部件。至少他们会有一个固定的html内容,如“摘要1”、“摘要2”、“免责声明”、“foo策略”。。。我需要的是,在每一页上都有不同的安排。因此,这不仅仅是“单一”对“归档”,而是真正的“产品页面A”对“产品页面B”对“关于我们”对“服务条款”。。。我在考虑自定义元框,以便在单个编辑器页面上打开和关闭它们wp-admin/post.php?post=196&action=ed