我已经为此绞尽脑汁好几天了,我的谷歌浏览器让我失望了。
我创建了一个带有下拉菜单的自定义元框,其中列出了自定义分类法中的所有术语。What I cannot figure out is how to save the selected option from the drop down menu when the post is saved. 我对PHP有点陌生,虽然我找到了很多教程和其他问题来讨论如何做到这一点,但当他们谈到保存数据时,我总是感到困惑。
以下是我创建metabox的代码:
<?php
function MC_Catalog_create() {
add_meta_box( \'MC_Catalog_meta\', \'Course Information\', \'MC_Catalog_course_info\',\'mc_course_post\', \'normal\', \'high\' );
}
function MC_Catalog_course_info( $post ) {
$MC_Catalog_course_area = get_post_meta( $post->ID, \'_MC_Catalog_course_area\', true );
$MC_Catalog_course_num = get_post_meta( $post->ID, \'_MC_Catalog_course_num\', true );
$MC_Catalog_course_name = get_post_meta( $post->ID, \'_MC_Catalog_course_name\', true );
$MC_Catalog_course_desc = get_post_meta( $post->ID, \'_MC_Catalog_course_desc\', true );
?>
<table class="form-table" style="width:auto;">
<tr>
<td valign="top">Course Area:</td>
<td valign="top">
<select name="MC_Catalog_course_area">
<?php
$myterms = get_terms(\'course_areas\', $args);
$args = array(\'orderby\'=>\'name\',\'order\'=>\'ASC\',\'hide_empty\'=>false);
foreach($myterms as $term){
echo "<option value=\'$term->term_id\'" . selected( $term->term_id, $MC_Catalog_course_area, false) .">" . esc_html( $term->name ) . "</option>";
}
?>
</select>
</td>
</tr>
<tr>
<td valign="top">Course Number:</td>
<td valign="top"><input name="MC_Catalog_course_num" type="text" value="<?php echo esc_attr( $MC_Catalog_course_num ); ?>" size="50" /></td>
</tr>
<tr>
<td valign="top">Course Title:</td>
<td valign="top"><input type="text" name="MC_Catalog_course_name" value="<?php echo esc_attr( $MC_Catalog_course_name ); ?>" size="50" /></td>
</tr>
<tr>
<td valign="top">Course Description:</td>
<td valign="top"><textarea name="MC_Catalog_course_desc" rows="8" cols="100"><?php echo esc_attr( $MC_Catalog_course_desc ); ?></textarea></td>
</tr>
</table>
<?php } ?>
下面是我保存元数据的代码:
//hook to save the meta box data
add_action( \'save_post\', \'MC_Catalog_save_meta\' );
function MC_Catalog_save_meta( $post_id ) {
//verify the meta data is set
if ( isset( $_POST[\'MC_Catalog_course_num\'] ) ) {
//save the meta data
update_post_meta( $post_id, \'_MC_Catalog_course_area\', strip_tags( $_POST[\'MC_Catalog_course_area\'] ) );
update_post_meta( $post_id, \'_MC_Catalog_course_num\', strip_tags( $_POST[\'MC_Catalog_course_num\'] ) );
update_post_meta( $post_id, \'_MC_Catalog_course_name\', strip_tags( $_POST[\'MC_Catalog_course_name\'] ) );
update_post_meta( $post_id, \'_MC_Catalog_course_desc\', strip_tags( $_POST[\'MC_Catalog_course_desc\'] ) );
}
}
?>