2011-06-21 11 views
1

WordPress 3.1.3を実行していて、より多くのまたはより少ないが繰り返しイベントにカウントダウンするサイドバーウィジェットを作成しようとしています。私はスタンドアロンのスクリプトで作業するカウントダウンの基礎となるPHPコードを持っていますが、実際にコードをウィジェット化しているのは、他の関数への参照を含んでいるからです。WordPressウィジェット内の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関数をそれらの中に入れておくのに十分な堅牢性はありません。だから私はこれらの "サポート機能"を置くべきですか、どのように私はウィジェット内でそれらを呼び出す必要がありますか? ご協力いただきありがとうございます。

答えて

2

これらの2つの機能をクラスの下に配置すると、クラスになります。その後、彼らはクラス内でも利用可能です。

... 
    } 

} # end class LMC_countdown 


function countdownTo() { 
    ... 

あなたはグローバル関数を記述しているので、それらはクラス外に属しています。あなたのウィジェットやその他のプラグイン/スクリプトで利用できるようになります。したがって、名前の前に接頭辞としてLMC_を付けることをお勧めします。

もう1つの方法は、それらをクラスに追加することです。クラスの機能のすべては、クラス内$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)); 
    ... 
    } 
    ... 
} 
+0

は、どのように私は、彼らが完全に 'LMC_countdown'クラス内に存在していること、これらの関数は、非グローバルな作りに行きますか? –

+1

それはうまくいく。それらをクラス関数として追加し、 '$ this-> countdownTo()'のように '$ this'でアクセスしてください。しかし、クラスの別の関数の内部に置かないでください。クラスの初めに。 – hakre

+0

@Tim Parent:自分のクラス関数の例とその呼び出し方法を追加しました。 – hakre

関連する問題