2
votes

I have the following function that I've added to my functions.php file in WordPress. The idea is that it gathers all of the titles of 'fsmodel' posts (a custom post type that I've created). It then returns these as an array, which I then use to populate a select tag in the custom meta fields for a second custom post type.

Basically, 'fsmodel' will have posts with a boat model, and the 'fsboat' post type will have a drop-down with the names of each of the models to select from.

Now, this appears to works fine in the Dashboard - the drop-down is populated as expected. When I save, however, the post doesn't show up in the Edit list. Also on the website, all pages output as the 404 error page when this function is active.

I'm certain that the problem lies within the following code - does anyone have any idea what I might have done wrong?


function fs_model_array() {
$models_array = array();
$loop = new WP_Query(array(
    'post_type' => 'fsmodel',
    'posts_per_page' => -1,
    'orderby' => 'title',
    'order' => 'ASC',
    'post_status' => 'publish'
    ));
while ( $loop->have_posts() ) : $loop->the_post();
$models_array[] = get_the_title();
endwhile;
return $models_array;
};
4

4 Answers

1
votes

OK, I've come up with a solution (I hope - it's holding up for now).

Instead of creating a loop, I've just used the $wpdb->get_results to search the database for the column with a WHERE filter for the custom post type.

Then run an array builder:

$models_array = array();
$model_db = $wpdb->get_results("SELECT post_title FROM $wpdb->posts WHERE post_type='fsmodel' AND post_status = 'publish'");

foreach ($model_db as $model_db) {
    $models_array[] = $model_db->post_title;
}

Thanks again for your time, hsatterwhite! :-)

0
votes

I think you might find that adding wp_reset_query() to the end of your function will solve your problems :)

0
votes

the problem is that you are invoking the wordpress loop at a strange place or a place that already has a loop going)?


http://codex.wordpress.org/The_Loop

0
votes

I like your solution, but I'd be inclined to say that you need to call the global variable of $post whenever you use the loop like this in a function, as it assigns it to that variable.

function fs_model_array(){
  global $post;
  $models_array = array();
  $loop = new WP_Query(array(
    ...