0

カスタム WordPress ウィジェットを作成するためのこの優れたテンプレートに基づく次のコードがあります。

<?php class DRCC_Feat extends WP_Widget {
function dr_post_select_list() {
    $drcc_posts_args = array(
        'post_type' => array( 'post', 'page', 'tribe_events' ),
        'numberposts' => -1,
        'orderby' => 'title',
        'order' => 'ASC'
    );
    $drcc_posts = get_posts( $drcc_posts_args );
    $dr_posts_array = array();
    foreach( $drcc_posts as $post ) {
        $dr_posts_array[$post->ID] = $post->post_title;
    }
    return $dr_posts_array;
}

protected $widget = array(
'description' => 'Custom widget for my client.',
'do_wrapper' => true,
'view' => false,    
'fields' => array(
    array(
        'name' => 'Post to Feature',
        'desc' => 'Enter the IDs of any posts, pages, etc. If more than one, separate with commas.',
        'id' => 'dr_feat_ids',
        'type' => 'select',
        'options' => dr_post_select_list(),
        'std' => ''
    )
)
);

// some more stuff here, but the error is above and the code works when I make 'options' somethings hard-coded.

} ?>

dr_post_select_list()保護された配列を呼び出して$widget投稿のリストを動的に生成しようとしていますが、関数を含むParse error: syntax error, unexpected '(', expecting ')'行を参照してエラーが発生します。dr_post_select_list()それが関数であることを認識していないかのようです。

私は他の場所でこの機能を試しましたが、うまくいきました。配列を公開しようとしましたが、何も変わりません。関数の出力を配列に保存し、変数を配列に入れてみました

根本的に間違ったことをしている気がします。

tl;dr - クラスの配列で呼び出されたメソッドが実行されない (またはメソッドとして認識されているように見える)。

4

1 に答える 1

2

}関数の締めくくりがありません。

コードを次のように置き換えます。

<?php
class DRCC_Feat extends WP_Widget {

    protected $widget = array(
            'description' => 'Custom widget for my client.',
            'do_wrapper' => true,
            'view' => false,
            'fields' => array(
                array(
                    'name' => 'Post to Feature',
                    'desc' => 'Enter the IDs of any posts, pages, etc. If more than one, separate with commas.',
                    'id' => 'dr_feat_ids',
                    'type' => 'select',
                    'options' => 'dr_post_select_list',
                    'std' => ''
                )
            )
    );

    function dr_post_select_list() {
        $drcc_posts_args = array(
            'post_type' => array( 'post', 'page', 'tribe_events' ),
            'numberposts' => -1,
            'orderby' => 'title',
            'order' => 'ASC'
        );
        $drcc_posts = get_posts( $drcc_posts_args );
        $dr_posts_array = array();
        foreach( $drcc_posts as $post ) {
            $dr_posts_array[$post->ID] = $post->post_title;
        }
        return $dr_posts_array;
    }
}

編集: クラス内のすべてのコードを移動し、エラーを修正しました。関数を配列に格納する方法については、この投稿もご覧ください。JSと言うのとは少し異なります。 関数を PHP 配列に格納できますか?

于 2012-07-06T01:39:27.680 に答える