WordPress小部件功能/类中的PHP函数

时间:2011-06-21 00:11:29

标签: php oop wordpress class widget

我正在运行WordPress 3.1.3,并希望创建一个侧栏小部件,或多或少倒计时到一个重复的事件。我已经为倒计时的底层PHP代码工作了一个独立的脚本,但是我遇到麻烦的实际上是“小部件化”代码,因为它包含对其他函数的引用。 < / p>

这是我所拥有的一个提炼版本(不包括所需的插件标题,等。):

add_action("widgets_init", array('LMC_countdown', 'register'));

class LMC_countdown extends WP_Widget {

  function control(){
    echo "This widget doesn't need a control panel in WordPress right now.";
    # In all likelihood, that'll be a separate issue for later. :)
  }
  function widget($args){
    echo $args['before_widget'];
      # //////////////////// BEGIN MAIN WIDGET FUNCTION //////////////////// 
      $year = date("Y",$today);
      echo "<div id=\"sidebar-countdown\">";
        /* ...
           quite a bit of additional PHP logic here, but boils down to:
        */
        echo countdownTo(findEventStart($year));
      echo "</div>";
      # //////////////////// END MAIN WIDGET FUNCTION ////////////////////
    echo $args['after_widget'];
  }
  function register(){
    register_sidebar_widget('LMC Countdown', array('LMC_countdown', 'widget'));
    register_widget_control('LMC Countdown', array('LMC_countdown', 'control'));
  }

} # end class LMC_countdown

问题当然是countdownTo()findEventStart()是自定义函数,它们“支持”主要的小部件操作,它们本身称之为其他一些“支持功能”。无论我在哪里尝试使用这些支持函数 - 无论是在register()之后的类中还是在widget()函数本身之内 - 我都会遇到错误,因为第一个函数未定义。

我从教程和“Hello world”示例中获得了我的大部分结构代码,但没有一个足够强大,可以将PHP函数嵌入其中。那么我应该在哪里放置这些“支持功能”,我应该如何在小部件中调用它们? 提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

将这两个函数放在类下面。然后他们也可以在课堂上找到。

  ...
  }

} # end class LMC_countdown


function countdownTo() {
  ...

您已经为它们编写了全局函数,因此它们属于类外。它们可用于您的小部件和任何其他插件/脚本。因此,最好使用LMC_为其名称添加前缀。

你可以做的另一种方法是将它们添加到课堂中。所有类的函数都可以通过类中的$this访问:

class LMC_countdown extends WP_Widget {
  # private functions
  private function countdownTo() {
    ...
  }
  private function findEventStart($year) {
    ...
  }
  ...
  # wp widget functions
  function widget($args){
    ...
    echo $this->countdownTo($this->findEventStart($year));
    ...
  }
  ...
}