【问题标题】:PHP functions within WordPress widget function/classWordPress 小部件函数/类中的 PHP 函数
【发布时间】:2011-06-21 00:11:29
【问题描述】:

我正在运行 WordPress 3.1.3,并希望创建一个侧边栏小部件,或多或少 可以倒计时到重复发生的事件。我有用于倒计时的底层 PHP 代码在一个独立的脚本中工作,但我遇到问题的地方实际上是“小部件化”代码,因为它包含对其他函数的引用。

这是我所拥有的内容的提炼版本(不包括所需的插件标题,):

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 函数。那么我应该把这些“支持功能”放在哪里,我应该如何在小部件中调用它们? 提前感谢您的帮助。

【问题讨论】:

    标签: php oop wordpress class widget


    【解决方案1】:

    将这两个函数放在类下方。然后它们也可以在类中使用。

      ...
      }
    
    } # 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));
        ...
      }
      ...
    }
    

    【讨论】:

    • 如何使这些函数成为非全局函数,以便它们完全存在于 LMC_countdown 类中?
    • 这也行得通。将它们添加为类函数,然后通过$this 访问它们,例如$this-&gt;countdownTo()。但不要将它放在类的另一个函数中,只放在类中,例如在课程开始时。
    • @Tim Parent:为您自己的类函数添加了一个示例以及如何调用它们。
    • 不过,$this-&gt;foo() 符号在 if() 语句的条件下似乎不起作用。
    • 不明白你的意思。它们像任何其他函数一样工作,因此您可以在 if() 语句或任何其他表达式中使用它们。如果函数返回您期望的结果,请检查 var_dump
    猜你喜欢
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 2016-05-19
    相关资源
    最近更新 更多