Функции PHP в функции / классе виджета WordPress - PullRequest
1 голос
/ 21 июня 2011

Я использую 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.Так, где я должен поместить эти «вспомогательные функции» и как я должен вызывать их в виджете? Заранее спасибо за помощь.

1 Ответ

3 голосов
/ 21 июня 2011

Поместите эти две функции ниже класса.Тогда они также доступны внутри класса.

  ...
  }

} # 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));
    ...
  }
  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...