如何让下拉菜单在主题中显示自定义元术语?

时间:2011-02-20 作者:m-torin

我在一个自定义的书写框中有一个下拉菜单,用于分类编号。如何在前端填充一个选择框,该框将:a)填充函数scriptb中定义的所有可能值b)在下拉菜单的页面加载中选择wp admin中选择的值?

这个问题背着我的how to add a select menu to a custom meta box 答案是(完美的)。

我的cpt元框代码:

function inventory_information() {
    global $post;

    echo \'<input type="hidden" name="inventorymeta_noncename" id="inventorymeta_noncename" value="\' .
    wp_create_nonce( plugin_basename(__FILE__) ) . \'" />\';

    $stocknum = get_post_meta($post->ID, \'_dappcf_i_stocknum\', true);
    $vin = get_post_meta($post->ID, \'_dappcf_i_vin\', true);
    $my_dropdown = get_post_meta($post->ID, \'_dappcf_i_dropdown\', true);

    echo \'<p>Stock #: <input type="text" name="_dappcf_i_stocknum" value="\' . $stocknum  . \'" class="widefat" style="width:80px" /> &nbsp;&nbsp;&nbsp; 
VIN: <input type="text" name="_dappcf_i_vin" value="\' . $vin  . \'" class="widefat"  style="width:200px" /></p>\';

    echo \'<p>Inventory class: <select name="_dappcf_i_dropdown" class="widefat">\';
    echo \'<option value="1"\'. $my_dropdown == "1" ? \' selected="selected"\' : \'\'. \'>\' . \'Option 1\'. \'</option>\';
    echo \'<option value="2"\'. $my_dropdown == "2" ? \' selected="selected"\' : \'\'. \'>\' . \'Option 2\'. \'</option>\'; 
    echo \'<option value="3"\'. $my_dropdown == "3" ? \' selected="selected"\' : \'\'. \'>\' . \'Option 3\'. \'</option>\'; 
    echo \'<option value="4"\'. $my_dropdown == "4" ? \' selected="selected"\' : \'\'. \'>\' . \'Option 4\'. \'</option>\'; 
    echo \'</select></p>\';
}

function txpbs_save_events_meta($post_id, $post) {
    if ( !wp_verify_nonce( $_POST[\'inventorymeta_noncename\'], plugin_basename(__FILE__) )) {
    return $post->ID;
    }
    if ( !current_user_can( \'edit_post\', $post->ID ))
return $post->ID;

    $station_meta[\'_dappcf_i_stocknum\'] = $_POST[\'_dappcf_i_stocknum\'];
    $station_meta[\'_dappcf_i_vin\'] = $_POST[\'_dappcf_i_vin\'];
    $station_meta[\'_dappcf_i_dropdown\'] = $_POST[\'_dappcf_i_dropdown\'];

    foreach ($station_meta as $key => $value) {
if( $post->post_type == \'revision\' ) return;
$value = implode(\',\', (array)$value); 
if(get_post_meta($post->ID, $key, FALSE)) {
    update_post_meta($post->ID, $key, $value);
} else {
    add_post_meta($post->ID, $key, $value);
}
if(!$value) delete_post_meta($post->ID, $key);
    }

}
当显示在输入字段中时,我使用此代码调用自定义字段:

<?php echo get_post_meta($post->ID, \'_dappcf_i_dropdown\', true); ?>
非常感谢您的指导。

1 个回复
最合适的回答,由SO网友:t31os 整理而成

我仍然不知道你的目标到底是什么,但回到这个问题上,我想至少尝试提供一个解决方案。

那么试试这个,看看这是否就是你对下拉列表的想法?

add_action( \'add_meta_boxes\', \'add_inventory_metaboxes\' );
function add_inventory_metaboxes() {
    add_meta_box(\'inventory_information\', \'Inventory Information\', \'inventory_information\', \'inventory\', \'side\', \'default\');
}

function inventory_dropdown_opts() {
    return array(
        \'Option 1\' => 1,
        \'Option 2\' => 2,
        \'Option 3\' => 3,
        \'Option 4\' => 4,
    );
}

function inventory_information() {
    global $post;

    $stk_num = get_post_meta( $post->ID, \'_dappcf_i_stocknum\', true );
    $vin_num = get_post_meta( $post->ID, \'_dappcf_i_vin\', true );
    $drp_dwn = get_post_meta( $post->ID, \'_dappcf_i_dropdown\', true );
    if( empty( $drp_dwn ) )
        $drp_dwn = 0;

    wp_nonce_field( \'inventory_nonce\', \'inventorymeta_noncename\' );
    ?>
    <p>
        <label>Stock #</label> 
        <input type="text" name="_dappcf_i_stocknum" value="<?php echo $stk_num; ?>" class="small-text" />
    </p>
    <p>
        <label>VIN</label> 
        <input type="text" name="_dappcf_i_vin" value="<?php echo $vin_num; ?>" class="widefat" /></p>
    <p>
        <label>Inventory class</label> 
        <select name="_dappcf_i_dropdown" class="widefat">
        <?php foreach( inventory_dropdown_opts() as $text => $value ) : ?>
            <option value="<?php echo $value; ?>"<?php selected( $value == $drp_dwn ); ?>><?php echo $text; ?></option>
        <?php endforeach; ?>
        </select>
    </p>
    <?php
}

add_action(\'save_post\', \'txpbs_save_events_meta\', 1, 2);

function txpbs_save_events_meta( $post_id, $post ) {
    if( 
        !wp_verify_nonce( $_POST[\'inventorymeta_noncename\'], \'inventory_nonce\' ) || 
        !current_user_can( \'edit_post\', $post_id ) || 
        $post->post_type == \'revision\'
        )
        return;

    foreach( array( \'_dappcf_i_stocknum\', \'_dappcf_i_vin\', \'_dappcf_i_dropdown\' ) as $field ) {
        if( isset( $_POST[$field] ) ) {
            if( \'_dappcf_i_dropdown\' == $field ) {
                if( in_array( $_POST[$field], inventory_dropdown_opts() ) )
                    update_post_meta( $post_id, $field, $_POST[$field] );
                continue;
            }
            update_post_meta( $post_id, $field, $_POST[$field] );
            continue;
        }
        delete_post_meta( $post_id, $key );
    }
}
Follow-up #1<如果需要在前端显示下拉列表,只需按照我在inventory_information 功能,就像这样。。

    <select name="add-a-name-here" class="widefat">
    <?php foreach( inventory_dropdown_opts() as $text => $value ) : ?>
        <option value="<?php echo $value; ?>"><?php echo $text; ?></option>
    <?php endforeach; ?>
    </select>
您的下拉选项在inventory_dropdown_opts 函数,因此您可以使用相同的前端和管理端,并查看相同的数据。

结束

相关推荐