如果选择了视频,请更新数据库值?

时间:2018-04-25 08:53:20

标签: php wordpress

我会尝试解释一下,我有一个按钮,我可以上传并选择要添加到帖子的视频。我有一个输入字段,我可以在一个持续时间(以秒为单位)。我已经创建了一个从数据库中提取视频长度的函数,这个长度我想放在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' );
    }

2 个答案:

答案 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