Wordpress Meta Box overwriting Page Slug


Wordpress Meta Box overwriting Page Slug

我在Wordpress 3.8中遇到了一个奇怪的错误。

我正在做的是在一侧创建一个元框,该元框是自定义帖子类型的多选。这很好用,因为我可以选择多种类型,保存帖子并在页面上显示多个项目(在本例中为号召性用语)。

奇怪的是,当我在Wordpress中更新页面时,页面的slug(permalink)成为$ctas查询中最后一个号召性用语类型的标题。

这里有什么突出的吗?它发生在if ($ctas->have_posts()街区。

// Disply the selection of CTAs in a meta box
function xxxxx_calloutContent($post) {
    // Get all the callouts
    $args = array('post_type' => 'callout', 'posts_per_page' => '100');
    $ctas = new WP_Query($args);
    $assignedCallouts = explode(',',get_post_meta($post->ID, 'callouts', true));
    // Create the meta box form
    wp_nonce_field('xxxxxCallout', 'xxxxxCalloutForm' );
    if (count($assignedCallouts) > 3) {
        xxxxx_ctaErrorMessage('Only three CTAs are allowed. Please choose three.');
        add_action('admin_notices', 'xxxxx_ctaErrorMessage');
    }
    echo '<label for="calloutSelect">Choose your CTAs</label><br>';
    echo '<select id="xxxxxCTASelect" name="xxxxxCTASelect[]" multiple="multiple">';
    if($ctas->have_posts()) {
        while($ctas->have_posts()) {
            $ctas->the_post();
            if (in_array(get_the_ID(), $assignedCallouts)) {
                echo '<option selected="selected" value="'.get_the_ID().'">'.get_the_title().'</option>';   
            } else {
                echo '<option value="'.get_the_ID().'">'.get_the_title().'</option>';
            }
        }
    } else {
        echo '<option value="" disabled="disabled">No Callouts</option>';
    }
    echo '</select>';
    wp_reset_postdata();
}

在管理员中使用WP_Query是不安全的,它会严重扰乱当前$post。切换到get_posts(),一切都应该按预期工作。