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

时间:2016-03-19 13:31:20

标签: php wordpress meta-boxes

我正在使用WP_Query从自定义帖子类型中获取帖子,以便在元数据箱中使用结果。我的查询一切都很好用。但在此查询之后,我无法从数据库中获取其他元值。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

好的,我解决了。

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