最初我的目标是压缩代码,现在修改后,它就不再工作了。我不明白为什么。我简化了一点,现在这段代码应该将在后端输入的一个日期保存在自定义帖子类型的自定义元框中,但显然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
相反此外,我现在将输入更改为
date
到
text
并使用
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);
}
最合适的回答,由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);
}
未经测试,但这应该非常接近。