0

I have the following code based on this great template for making custom WordPress widgets:

<?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.

} ?>

I am trying to call dr_post_select_list() in the protected $widget array to dynamically generate a list of posts, but I get the error Parse error: syntax error, unexpected '(', expecting ')' in reference to the line with the dr_post_select_list() function in it. It's as if it doesn't recognize that it's a function.

I've tried the function elsewhere and it works fine. I've tried making the array public and that doesn't change anything. I've tried saving the function output in an array and putting the variable in the array

I get the sense that I'm doing something fundamentally wrong.

tl;dr - method called in array in a class doesn't run (or seem to be recognized as a method).

mrwweb
  • 1,344
  • 2
  • 12
  • 22

1 Answers1

2

You're missing a closing } for your function.

Replace your code with the following:

<?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;
    }
}

Edited: Moved all code inside class, corrected error. Have a look at this post as well in regards to storing functions in an array. Slightly different than say JS. Can you store a function in a PHP array?

Community
  • 1
  • 1
Valjas
  • 4,994
  • 1
  • 21
  • 32
  • That didn't change anything. Same error as before. The entire code snippet is supposed to be in the class, not just the function. – mrwweb Jul 06 '12 at 02:43
  • The above code should fix the error as well as enclose everything inside of the class. I misunderstood what you were trying to do initially. – Valjas Jul 06 '12 at 03:59