我在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()
,一切都应该按预期工作。