wp_reset_postdata() 不恢复全局 $post 变量

wp_reset_postdata() doesn't restore the global $post variable

我正在使用 WP_Query 从自定义 post 类型获取 posts 以在元数据框中使用结果。一切都适用于我的查询。但是在这个查询之后我无法从数据库中获取其他元值。

这是我获取自定义字段值的辅助函数:

function my_page_get_custom_field( $value ) {
    global $post;

    $custom_field = get_post_meta( $post->ID, $value, true );
    if ( !empty( $custom_field ) )
        return is_array( $custom_field ) ? stripslashes_deep( $custom_field ) : stripslashes( wp_kses_decode_entities( $custom_field ) );

    return false;
}

这是我的查询:

$sliderArgs = array(
    'posts_per_page'    => -1,
    'post_type'         => 'slider',
);
$slider = new WP_Query($sliderArgs);
if ($slider->have_posts()) {
?>
    <select name="slider" id="slider">
    $selectedSlide = my_page_get_custom_field('slider');
    while($slider->have_posts()){
        $slider->the_post();
        $slideID = get_the_ID();
        ?><option value="<?php echo $slideID; ?>" <?php selected($selectedSlide, $slideID, true); ?>><?php the_title(); ?></option><?php
    }
    wp_reset_postdata(); ?>
    </select>
}

这是我的另一个自定义字段,returns 为空(数据库中有一个值,当我尝试更改它时效果很好,但没有显示在管理员的输入值中):

<input type="text" name="meta_title" id="meta_title" value="<?php echo my_page_get_custom_field('meta_title'); ?>">

好的,我解决了。

我用 get_posts 而不是 WP_Query。这对我帮助很大:https://core.trac.wordpress.org/ticket/18408#comment:5