How to fix this WordPress function so that it doesn’t return a 404 page?

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.

Read More

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

Related posts

Leave a Reply

3 comments

  1. 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! 🙂

  2. 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(
        ...