views:

56

answers:

4

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;
};
A: 

This has been asked recently. Click here to see what the experts have to say. Good luck :)

hsatterwhite
Thanks for trying to help - unfortunately, that didn't fix it. It's not quite the same problem as on that page you linked to - I'm getting 404 errors for existing WP pages as well, ie. those using page.php, index.php, etc.
Rob Barrett
Interesting. Have you tried checking your permalink settings in your .htaccess file? You can reset those parameters via Settings -> Permalinks.
hsatterwhite
I did, thanks - that didn't fix the problem though.
Rob Barrett
A: 

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! :-)

Rob Barrett
A: 

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

TheDeadMedic
Thanks for the input. Unfortunately, I'd tried that before, and it didn't help.
Rob Barrett
A: 

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

Kasumi
Thanks for your help, Kasumi. I thought that was the case, but it wasn't clear to me how to run this outside of the loop affected by functions.php. The database query in my answer here solved my problem though.
Rob Barrett