ADD_META_BOX:日期选择器,就像用于延迟日期的日期选择器?

时间:2012-04-09 作者:mathiregister

我构建了一个名为“事件”的自定义帖子类型。每个事件都有一个未来的日期,我不想使用正常的postdate 该职位的。

我想使用add_meta_box 为该“事件日期”添加一些输入。

你知道我怎样才能使用和现在一样的日期选择器postdate 在meta\\u框中?

提前谢谢你。

马特

更新时间:

add_action("admin_init", "admin_init");

function admin_init(){
    add_meta_box("event-date-meta", "Event Date", "event_date", "wr_event", "side", "low");
}


function year_completed(){
    global $post;
    $custom = get_post_custom($post->ID);
    //…
    ?>
    <label>Event-Date:</label>
    <div id="timestampdiv" class=""><?php touch_time(($action == \'edit\'),1,4); ?></div>
    <?php
}

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

从未真正想过,但这确实应该是一个好的选择。

从wp admin/includes/meta框调用日期选择器。php(第183行)为:

<div id="timestampdiv" class="hide-if-js"><?php touch_time(($action == \'edit\'),1,4); ?></div>
而touch\\u time()是在wp admin/includes/template中定义的。php(第550行)为:

/**
 * {@internal Missing Short Description}}
 *
 * @since 0.71
 *
 * @param unknown_type $edit
 * @param unknown_type $for_post
 * @param unknown_type $tab_index
 * @param unknown_type $multi
 */
function touch_time( $edit = 1, $for_post = 1, $tab_index = 0, $multi = 0 ) {
    global $wp_locale, $post, $comment;

    if ( $for_post )
        $edit = ! ( in_array($post->post_status, array(\'draft\', \'pending\') ) && (!$post->post_date_gmt || \'0000-00-00 00:00:00\' == $post->post_date_gmt ) );

    $tab_index_attribute = \'\';
    if ( (int) $tab_index > 0 )
        $tab_index_attribute = " tabindex=\\"$tab_index\\"";

    // echo \'<label for="timestamp" style="display: block;"><input type="checkbox" class="checkbox" name="edit_date" value="1" id="timestamp"\'.$tab_index_attribute.\' /> \'.__( \'Edit timestamp\' ).\'</label><br />\';

    $time_adj = current_time(\'timestamp\');
    $post_date = ($for_post) ? $post->post_date : $comment->comment_date;
    $jj = ($edit) ? mysql2date( \'d\', $post_date, false ) : gmdate( \'d\', $time_adj );
    $mm = ($edit) ? mysql2date( \'m\', $post_date, false ) : gmdate( \'m\', $time_adj );
    $aa = ($edit) ? mysql2date( \'Y\', $post_date, false ) : gmdate( \'Y\', $time_adj );
    $hh = ($edit) ? mysql2date( \'H\', $post_date, false ) : gmdate( \'H\', $time_adj );
    $mn = ($edit) ? mysql2date( \'i\', $post_date, false ) : gmdate( \'i\', $time_adj );
    $ss = ($edit) ? mysql2date( \'s\', $post_date, false ) : gmdate( \'s\', $time_adj );

    $cur_jj = gmdate( \'d\', $time_adj );
    $cur_mm = gmdate( \'m\', $time_adj );
    $cur_aa = gmdate( \'Y\', $time_adj );
    $cur_hh = gmdate( \'H\', $time_adj );
    $cur_mn = gmdate( \'i\', $time_adj );

    $month = "<select " . ( $multi ? \'\' : \'id="mm" \' ) . "name=\\"mm\\"$tab_index_attribute>\\n";
    for ( $i = 1; $i < 13; $i = $i +1 ) {
        $monthnum = zeroise($i, 2);
        $month .= "\\t\\t\\t" . \'<option value="\' . $monthnum . \'"\';
        if ( $i == $mm )
            $month .= \' selected="selected"\';
        $month .= \'>\' . $monthnum . \'-\' . $wp_locale->get_month_abbrev( $wp_locale->get_month( $i ) ) . "</option>\\n";
    }
    $month .= \'</select>\';

    $day = \'<input type="text" \' . ( $multi ? \'\' : \'id="jj" \' ) . \'name="jj" value="\' . $jj . \'" size="2" maxlength="2"\' . $tab_index_attribute . \' autocomplete="off" />\';
    $year = \'<input type="text" \' . ( $multi ? \'\' : \'id="aa" \' ) . \'name="aa" value="\' . $aa . \'" size="4" maxlength="4"\' . $tab_index_attribute . \' autocomplete="off" />\';
    $hour = \'<input type="text" \' . ( $multi ? \'\' : \'id="hh" \' ) . \'name="hh" value="\' . $hh . \'" size="2" maxlength="2"\' . $tab_index_attribute . \' autocomplete="off" />\';
    $minute = \'<input type="text" \' . ( $multi ? \'\' : \'id="mn" \' ) . \'name="mn" value="\' . $mn . \'" size="2" maxlength="2"\' . $tab_index_attribute . \' autocomplete="off" />\';

    echo \'<div class="timestamp-wrap">\';
    /* translators: 1: month input, 2: day input, 3: year input, 4: hour input, 5: minute input */
    printf(__(\'%1$s%2$s, %3$s @ %4$s : %5$s\'), $month, $day, $year, $hour, $minute);

    echo \'</div><input type="hidden" id="ss" name="ss" value="\' . $ss . \'" />\';

    if ( $multi ) return;

    echo "\\n\\n";
    foreach ( array(\'mm\', \'jj\', \'aa\', \'hh\', \'mn\') as $timeunit ) {
        echo \'<input type="hidden" id="hidden_\' . $timeunit . \'" name="hidden_\' . $timeunit . \'" value="\' . $$timeunit . \'" />\' . "\\n";
        $cur_timeunit = \'cur_\' . $timeunit;
        echo \'<input type="hidden" id="\'. $cur_timeunit . \'" name="\'. $cur_timeunit . \'" value="\' . $$cur_timeunit . \'" />\' . "\\n";
    }
?>

<p>
<a href="#edit_timestamp" class="save-timestamp hide-if-no-js button"><?php _e(\'OK\'); ?></a>
<a href="#edit_timestamp" class="cancel-timestamp hide-if-no-js"><?php _e(\'Cancel\'); ?></a>
</p>
<?php
}
从那里开始工作看起来并不困难。。。将尝试。

结束