我有一个自定义的帖子类型,其中有一个带有下拉列表的元框。下拉列表中填充了来自其他自定义帖子类型的帖子标题。
我的metabox系统工作正常。我尝试对选项进行硬编码,它们保存正确。我还可以从自定义帖子类型中提取数据来填充下拉列表。
问题在于数据的保存/加载。
我尝试了wp\\u query和get\\u post,以及相应的重置,但每当我尝试拉入数据时,下拉列表不会更新,永久链接将更改为最后拉入的自定义post类型。
我只需要知道如何正确地拉入数据,或者正确地重置循环。
/* Create role metabox */
function create_roles_metabox() {
global $post;
add_meta_box(
\'roles_metabox\',
\'Role Area & Level\',
\'show_roles_metabox\',
\'role\',
\'side\',
\'high\'
);
}
/* Show roles metabox */
function show_roles_metabox() {
global $post;
wp_nonce_field(basename(__FILE__), \'role_nonce\');
$pro_areas = array(
\'One\',
\'Two\',
\'Three\'
);
/*
$args = array(
\'post_type\' => \'proarea\',
\'publish_status\' => \'publish\',
\'posts_per_page\' => -1,
\'order\' => \'ASC\'
);
$the_query = new WP_Query($args);
if($the_query->have_posts()) {
echo \'<ul>\';
while ( $the_query->have_posts()) {
$the_query->the_post();
echo \'<li>\' . get_the_title() . \'</li>\';
}
echo \'</ul>\';
} else {
}
*/
/*
$mcpt_query = array();
$the_query = get_posts(\'post_type=proarea\');
foreach ( $the_query as $post ) : setup_postdata( $post );
$mcpt_query[] = array(
\'title\' => get_the_title($post->ID)
);
endforeach;
wp_reset_postdata();
print_r($mcpt_query);
*/
echo \'<span><label for="pro_area">Professional Area: </label></span>\';
echo \'<select name="pro_area">\';
foreach($pro_areas as $pro_area) {
if($pro_area == get_post_meta($post->ID, \'pro_area\', true))
echo \'<option selected>\'. $pro_area .\'</option>\';
else
echo \'<option>\'. $pro_area .\'</option>\';
}
echo \'</select>\';
}
/* Save roles metabox */
function save_roles_metabox($post_id, $post) {
if(!isset($_POST[\'role_nonce\']) || !wp_verify_nonce($_POST[\'role_nonce\'], basename(__FILE__)))
return $post->ID;
if(!current_user_can(\'edit_post\', $post->ID))
return $post->ID;
if(defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE)
return $post->ID;
if(isset($_POST[\'pro_area\']))
update_post_meta($post_id, \'pro_area\', $_POST[\'pro_area\']);
}
add_action(\'add_meta_boxes\', \'create_roles_metabox\');
add_action(\'save_post\', \'save_roles_metabox\', 1, 2);
SO网友:Quin
好的,我已经整理好了。
我在这里找到了一个类似的帖子;WordPress没有重置回主循环。
所以我现在的代码是:
/* Show roles metabox */
function show_roles_metabox() {
global $post;
$tempPost = $post;
wp_nonce_field(basename(__FILE__), \'role_nonce\');
$pro_areas = array(
\'One\',
\'Two\',
\'Three\'
);
$args = array(
\'post_type\' => \'proarea\',
\'publish_status\' => \'publish\',
\'posts_per_page\' => -1,
\'order\' => \'ASC\'
);
$the_query = new WP_Query($args);
if($the_query->have_posts()) {
echo \'<ul>\';
while ( $the_query->have_posts()) {
$the_query->the_post();
echo \'<li>\' . get_the_title() . \'</li>\';
}
echo \'</ul>\';
} else {
}
wp_reset_postdata();
/*
$mcpt_query = array();
$the_query = get_posts(\'post_type=proarea\');
foreach ( $the_query as $post ) : setup_postdata( $post );
$mcpt_query[] = array(
\'title\' => get_the_title($post->ID)
);
endforeach;
wp_reset_query();
print_r($mcpt_query);
*/
$post = $tempPost;
echo \'<span><label for="pro_area">Professional Area: </label></span>\';
echo \'<select name="pro_area">\';
foreach($pro_areas as $pro_area) {
if($pro_area == get_post_meta($post->ID, \'pro_area\', true))
echo \'<option selected>\'. $pro_area .\'</option>\';
else
echo \'<option>\'. $pro_area .\'</option>\';
}
echo \'</select>\';
}
我所做的是设置global$post,也设置了相同的$tempPost。在“重置”之后,我用存储在$tempPost中的内容更新了$post。永久对齐保持不变,可以更改选项,并显示所有区域。
希望这样可以加载和保存区域。