Проверка наличия файла перед загрузкой на веб-страницу - PullRequest
0 голосов
/ 02 мая 2020

Я создал функцию php, которая меняет фон в посте WordPress на основе того, что указано в настраиваемом поле, например red001 (который будет загружать https://example.com/img/backgrounds/red001.jpg)

это заняло много времени, так как я не очень хорошо разбираюсь в php, но мне нужно улучшение, которое мне нужно, чтобы начать работу.

это скрипт, который когда-то вставлялся в функции . php будет обрабатывать фон.

<?php
// Set background from custom field via "rbpet_background_image" function
function rbpet_post_background() {

    if ( $background = get_post_meta( get_the_ID(), 'usp-custom-background_image', true ) ) { 
$backgroundpre = "https://example.com/img/backgrounds/";
$backgroundpost = ".jpg";
$newbgurl = $backgroundpre . $background . $backgroundpost;
?>
        <style type="text/css">
            body { background-image: url( "<?php echo ($newbgurl); ?>")!important; }
        </style>
    <?php }
}
add_action( 'wp_head', 'rbpet_post_background' );

как я уже писал, это работает, НО, если я теперь хочу иметь фон в gif, png или mov ie?

Я не хочу указывать это в пользовательских полях, как мне это сделать?

Я думал о том, чтобы как-то проверить, существует ли файл .jpg, затем загрузить его, а если нет, проверить. если файл .gif существует, загрузите его, а если нет, проверьте, существует ли файл .mp4 .... возможно ли это так или иначе?

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

Мне потребовалось пару часов, чтобы решить, почему это не сработало.

@ Себастьян В. выполнил основную работу со сценарием, я просто изменил способ загрузки файла

    // set background based on custom field in post
    function rbpet_post_background () {

        if ( empty( $background = get_post_meta( get_the_ID(), 'usp-custom-background_image', true ) ) ) return;
        $base = "https://example.com/img/backgrounds/";
        $extensions = array( ".jpg" , ".gif" , ".mp4" );

        foreach ( $extensions as $ext ) {

            $file = $base . $background . $ext;
            $file_headers = 

@get_headers( $file );
            if ( $file_headers[0] == "HTTP/1.1 200 OK" ) {
                $background_url = $file;
                break;
            }

        }



 if ( empty( $background_url ) ) return;

?>
    <style type="text/css">
            body { background-image: url( "<?php echo ($background_url); ?>")!important; }
        </style>
<?php
}

    add_action( "wp_head" , "rbpet_post_background" );
0 голосов
/ 02 мая 2020

Это может быть один из способов сделать это.

function rbpet_post_background () {

    if ( empty( $background = get_post_meta( get_the_ID(), 'usp-custom-background_image', true ) ) ) return;
    $base = "https://example.com/img/backgrounds/";
    $extensions = array( ".jpg" , ".gif" , ".mp4" );

    foreach ( $extensions as $ext ) {

        $file = $base . $background . $ext;
        $file_headers = @get_headers( $file );
        if ( $file_headers[0] == "HTTP/1.1 200 OK" ) {
            $background_url = $file;
            break;
        }

    }

    if ( empty( $background_url ) ) return;

    wp_add_inline_style( "admin-checklist-handle" , 'body { background-image: url("' . $background_url . '")!important; }' );

}

add_action( "wp_head" , "rbpet_post_background" );

Вы можете использовать file_exists вместо get_headers. Это будет лучше с точки зрения производительности. Однако вы должны быть уверены, что $ base находится на вашем сервере, и вам нужно будет использовать путь вместо URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...