简体   繁体   中英

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.

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

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

我认为您可能会发现将wp_reset_query()添加到函数的末尾将解决您的问题:)

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM