我会尝试解释一下,我有一个按钮,我可以上传并选择要添加到帖子的视频。我有一个输入字段,我可以在一个持续时间(以秒为单位)。我已经创建了一个从数据库中提取视频长度的函数,这个长度我想放在slide_duration
下的数据库中。如果没有选择视频我想让它像往常一样工作,你可以输入一个自定义值(以秒为单位),或者你可以将此输入留空(这使它恢复到标准值)。 / p>
相关的PHP看起来像这样:
if ( isset( $_POST['slide_duration'] ) && is_numeric( $_POST['slide_duration'] ) && $_POST['slide_duration'] >= 1 ) {
$slide_duration = intval($_POST['slide_duration']);
update_post_meta( $post_id, 'slide_duration', $slide_duration );
}
else {
delete_post_meta( $post_id, 'slide_duration' );
}
这是我触摸它之前的样子。如果没有输入值,它会删除slide_duration
,这就是我需要保留它的方法,如果没有任何值,它将恢复为默认值。
我现在在上面的代码之后添加了这部分:
if ( isset( $_POST['background-video'] ) ) {
update_post_meta( $post_id, 'slide_duration', $video_meta['length'] );
}
选择视频时,这将更新数据库中的slide_duration
。但是我无法在输入字段中手动设置时间,在保存/更新帖子时它始终会恢复为0
。如果我将代码放在原始代码之上,我可以在输入中输入任何我想要的值,但选择视频不会再更新slide_duration
。
有关更多上下文,这是输入的外观:
<?php
$slide_duration = isset( $theme_stored_meta['slide_duration'] ) ? intval($theme_stored_meta['slide_duration'][0]) : '';
?>
<input type="number" name="slide_duration" value="<?=$slide_duration?>" min="1" step="1" style="width: 70px;" /> <?=__('seconds', 'theme')?>
希望我已经解释得足够好,并提供了足够的代码来清楚地了解这一点。
编辑:也试过这个:
if ( isset( $_POST['slide_duration'] ) && is_numeric( $_POST['slide_duration'] ) && $_POST['slide_duration'] >= 1 ) {
$slide_duration = intval($_POST['slide_duration']);
update_post_meta( $post_id, 'slide_duration', $slide_duration );
}
elseif ( isset( $_POST['slide_duration'] ) ) {
update_post_meta( $post_id, 'slide_duration', $video_meta['length'] );
}
if ( is_null( $_POST['slide_duration'] ) ) {
delete_post_meta( $post_id, 'slide_duration' );
}
答案 0 :(得分:0)
试试这个:
// If a video is selected, set slide_duration to the database value.
if ( isset( $_POST['background-video'] ) ) {
update_post_meta( $post_id, 'slide_duration', $video_meta['length'] );
// If a video is not selected, use the custom slide_duration input/value, if
// it's specified and that it is >= 1.
} elseif (
isset( $_POST['slide_duration'] ) &&
is_numeric( $_POST['slide_duration'] ) &&
$_POST['slide_duration'] >= 1
) {
update_post_meta( $post_id, 'slide_duration', (int) $_POST['slide_duration'] );
// If no video is selected, and slide_duration is either not specified or
// invalid, then we delete the meta data.
} else {
delete_post_meta( $post_id, 'slide_duration' );
}
答案 1 :(得分:0)
终于搞定了!
我真的不知道它做了什么,但这是有效的:
if ( $_POST['slide_duration'] == NULL ) {
delete_post_meta( $post_id, 'slide_duration' );
}
if ( isset( $_POST['slide_duration'] ) && is_numeric( $_POST['slide_duration'] ) && $_POST['slide_duration'] >= 1 ) {
update_post_meta( $post_id, 'slide_duration', (int) $_POST['slide_duration'] );
}
if( isset( $_POST[ 'background-video' ] ) && $video_meta['length'] >= 1 ) {
update_post_meta( $post_id, 'slide_duration', $video_meta['length'] );
}
非常感谢Sally CJ