`UPDATE_POST_META`不再起作用

时间:2015-12-06 作者:MrKainig

最初我的目标是压缩代码,现在修改后,它就不再工作了。我不明白为什么。我简化了一点,现在这段代码应该将在后端输入的一个日期保存在自定义帖子类型的自定义元框中,但显然update_post_meta() 功能不再工作。E、 g.如果我选择一个日期并保存帖子,更改不会保存。

add_action (\'admin_init\', \'cpt_event_meta_fields\');
add_action (\'save_post\', \'cpt_event_save_data\');
    function cpt_event_meta_fields() {
        add_meta_box("event-meta-1", "Datum (von)", "cpt_event_callback", "Termin", "normal", "high");
    }
    function cpt_event_callback( $post ) {
        $dateStart = get_post_meta( get_the_ID(), \'date-start\', true );
        echo $dateStart;
        echo \'<input type="date" name="date-start" value="\' . $dateStart . \'" />\';
    }
    function cpt_event_save_data() {
        global $post;
        update_post_meta(get_the_ID(), "date-start", $dateStart);
    }
在查看了下面的答案后,我更新了代码。我的主要问题是global $post循环外部。我用过global $_POST 相反此外,我现在将输入更改为datetext 并使用sanitize_text_field()

add_action (\'admin_init\', \'cpt_event_meta_fields\');
add_action (\'save_post\', \'cpt_event_save_data\');
function cpt_event_meta_fields() {
    add_meta_box("event-meta-1", "Datum (von)", "cpt_event_callback", "Termin", "normal", "high");
    add_meta_box("event-meta-2", "Datum (bis)", "cpt_event_2_callback", "Termin", "normal", "high");
}
function cpt_event_callback( $post ) {
    $dateStart = get_post_meta( get_the_ID(), \'date-start\', true );
    echo \'<input type="text" name="date-start" value="\' . $dateStart . \'" />\';
}
function cpt_event_2_callback( $post ) {
    $dateEnd = get_post_meta( get_the_ID(), \'date-end\', true );
    echo \'<input type="text" name="date-end" value="\' . $dateEnd . \'" />\';
}
function cpt_event_save_data() {
    global $_POST;
    global $dateStart;
    $dateStart = sanitize_text_field($_POST[\'date-start\']);
    $dateEnd = sanitize_text_field($_POST[\'date-end\']);
    update_post_meta(get_the_ID(), "date-start", $dateStart);
    update_post_meta(get_the_ID(), "date-end", $dateEnd);
}

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

get_the_ID() 是一个“循环”函数。外面不会有the Loop, 代码中没有循环。本质上,你通过了一个坏的ID 导致其失败的功能。如果你有debugging enabled 您可能会看到这种效果的反馈。

您还使用了一个变量--$dateStart-- 这不是在函数的上下文中设置的。

您没有正确使用save_post hook, 然而如果您要求,WordPress会将帖子ID传递给您的回拨。

最后,你想要的是global $_POST; 这是PHP表单数据,而不是global $post; with是WordPress变量,是循环的主要组件。

function cpt_event_save_data($pid) {
    global $_POST;
    $dateStart = $_POST[\'date-start\']; 
    // sanitize $datestart, maybe with PHP\'s checkdate()
    // I don\'t know what the format of your string is though
    update_post_meta($pid, "date-start", $dateStart);
}
未经测试,但这应该非常接近。

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请