如何使此Metabox显示当前数据库值?

时间:2015-11-16 作者:John Lucey

<p>
    <?php
        $options = get_option( \'city\' );
        $names = explode( PHP_EOL, $options );
        ?>
        <label for="City" class="timeshare-row-title"><?php _e( \'City:\', \'timeshare-textdomain\' )?></label>
        <select name="city" id="city">
        <?php foreach ( $names as $name ) {
            printf(
                \'<option value="%s" selected="selected">%s</option>\',
                $name,
                $name
            );
        } ?>

        </select>
</p>
保存功能:

 if( isset( $_POST[ \'city\' ] ) ) {
    update_post_meta( $post_id, \'city\', sanitize_text_field( $_POST[ \'city\' ] ) );
}
这是用于工作选择元数据库的代码,这是使用硬编码选项完成的。

<p>
    <label for="beds" class="timeshare-row-title"><?php _e( \'Bedrooms:\', \'timeshare-textdomain\' )?></label>
    <select name="beds" id="beds">
        <option value="1" <?php if ( isset ( $timeshare_stored_meta[\'beds\'] ) ) selected( $timeshare_stored_meta[\'beds\'][0], \'1\' ); ?>><?php _e( \'1\', \'timeshare-textdomain\' )?></option>\';
        <option value="2" <?php if ( isset ( $timeshare_stored_meta[\'beds\'] ) ) selected( $timeshare_stored_meta[\'beds\'][0], \'2\' ); ?>><?php _e( \'2\', \'timeshare-textdomain\' )?></option>\';
        <option value="3" <?php if ( isset ( $timeshare_stored_meta[\'beds\'] ) ) selected( $timeshare_stored_meta[\'beds\'][0], \'3\' ); ?>><?php _e( \'3\', \'timeshare-textdomain\' )?></option>\';
        <option value="4" <?php if ( isset ( $timeshare_stored_meta[\'beds\'] ) ) selected( $timeshare_stored_meta[\'beds\'][0], \'4\' ); ?>><?php _e( \'4\', \'timeshare-textdomain\' )?></option>\';
    </select>
</p>

and the save code for it:
     // Checks for input and saves if needed
    if( isset( $_POST[ \'beds\' ] ) ) {
    update_post_meta( $post_id, \'beds\', $_POST[ \'beds\' ] );
}
保存功能:

function timeshare_meta_save( $post_id ) {

// Checks save status
$is_autosave = wp_is_post_autosave( $post_id );
$is_revision = wp_is_post_revision( $post_id );
$is_valid_nonce = ( isset( $_POST[ \'timeshare_nonce\' ] ) && wp_verify_nonce( $_POST[ \'timeshare_nonce\' ], basename( __FILE__ ) ) ) ? \'true\' : \'false\';

// Exits script depending on save status
if ( $is_autosave || $is_revision || !$is_valid_nonce ) {
    return;
}

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

从发布的Github文件中,打印元框的函数如下

function timeshare_meta_callback( $post ) {
正如你所见,$post 传递给此函数。这是一个WP_Post 对象,其中包含该帖子的所有信息。

WP\\u Post有一个名为ID, 这是获取保存的当前post meta值所必需的。所以,你需要这样做获取帖子id

$post_id = $post->ID;
这是完整的代码

<p>
    <?php
        $post_id = $post->ID;
        $options = get_option( \'city\' );
        $city_value = get_post_meta( $post_id, \'city\', true );
        $names = explode( PHP_EOL, $options );
        ?>
        <label for="City" class="timeshare-row-title"><?php _e( \'City:\', \'timeshare-textdomain\' )?></label>
        <select name="city" id="city">
        <?php foreach ( $names as $name ) {
            printf(
                \'<option value="%s" %s>%s</option>\',
                $name,
                selected($name, $city_value, false),
                $name
            );
        } ?>

        </select>
</p>
相反,在保存过程中,只传递post id,从这里可以看到。

function timeshare_meta_save( $post_id ) {
因此,您可以这样做来直接保存post meta值

    if( isset( $_POST[ \'city\' ] ) ) {
        update_post_meta( $post_id, \'city\', sanitize_text_field( $_POST[ \'city\' ] ) );
    }

相关推荐

如何将Java脚本添加到Custom-Page.php模板?

如何将javascript添加到自定义页面。php模板?如何使从w3schools ajax教程获得的以下javascript在自定义页面上工作。php模板?任何帮助都将不胜感激。工作javascript包含在以下HTML中:<!DOCTYPE html> <html> <style> table,th,td { border : 1px solid black; border-collapse: collapse;&#x