WP Oembed không chuyển qua biến autoplay = 1 Biến


7

Tôi đang gặp vấn đề ở đây:

Tôi chuyển cái này qua một trường tùy chỉnh: http://www.youtube.com/watch?v=E6P1Q-UycHA&autoplay=1

(chú ý autoplay=1)

Nhưng khi tôi tải video về chủ đề của mình bằng wp_oembed_get ... nó sẽ hiển thị video tốt, nhưng nó không lắng nghe autoplay=1biến tôi đang đi qua.

Tôi cần các video để phát trên tải của trang.

Có ý kiến ​​gì không?

Cảm ơn, Alain Fontaine


Hãy thử câu trả lời này: stackoverflow.com/a/16801334/2721050 Điều đó rất hữu ích cho tôi
Erez Lieberman

Câu trả lời:


6

Những đối số đó không thực sự như đối với YouTube, nhiều đối số hơn cho chính WordPress.

Một cách để xử lý vấn đề đó là truy cập vào đối số của bạn sau trong bộ lọc và sửa đổi đầu ra HTML.

Truyền vào mảng đối số:

wp_oembed_get( 'http://www.youtube.com/watch?v=', array( 'autoplay' => 1 ) );

Và lọc:

add_filter('oembed_result','oembed_result', 10, 3);

function oembed_result($html, $url, $args) {

    // $args includes custom argument
    // modify $html as you need

    return $html;
}

4

Tôi biết câu hỏi này khá cũ, nhưng tôi có một giải pháp hiệu quả mà tôi cho rằng có thể hữu ích cho bất kỳ ai khác đang cố gắng tìm thông tin này và sắp hết trong các tìm kiếm của Google.

Giải pháp này đã được thử nghiệm trong WordPress 3.7.1+:

/**
 * Adds the `autoplay` query string argument to embedded YouTube videos
 */
function wpse5362_autoplay_youtube_oembed( $provider, $url, $args ) {
    if (strpos($provider, 'youtube')!==FALSE) {
        $provider = add_query_arg('autoplay', 1, $provider);
    }

    return $provider;
}
add_filter('oembed_fetch_url', 'wpse5362_autoplay_youtube_oembed', 10, 3);

Thêm phần trên trong chủ đề của bạn functions.phpđể khiến tất cả các video YouTube được thêm qua oEmbed vào tự động phát.


Cách thức hoạt động

Trong class-oembed.php trên dòng 212, fetch()phương thức áp dụng bộ lọc oembed_fetch_urlđể cho phép sửa đổi URL.

Để tránh thêm các tham số vô dụng vào các nhà cung cấp oEmbed khác, chúng tôi kiểm tra "youtube" trong URL của nhà cung cấp - chúng tôi cũng có thể kiểm tra "vimeo" và / hoặc các dịch vụ video khác - và, nếu có chuỗi đó, hãy thêm một autoplayđối số vào truy vấn chuỗi.


5
Giải pháp này không hiệu quả với tôi. Nó thêm &autoplay=1vào URL nhà cung cấp . Đó không phải là iframe src và hệ thống oembed của youtube không mang nó đi. Giá trị bị mất trong thời gian _fetch_with_formatđó được gọi sau oembed_fetch_url. Có thể điều này được sử dụng để làm việc nhưng YouTube đã thay đổi api oembed của họ?
Radley Sustaire

1

Đây là giải pháp của tôi trong Hàm.php

function embed_responsive_autoplay($code){
    if(strpos($code, 'youtu.be') !== false || strpos($code, 'youtube.com') !== false){
        $return = preg_replace('@embed/([^"&]*)@', 'embed/$1&showinfo=0&autoplay=1', $code);
        return '<div class="embed-container">' . $return . '</div>';
    }
    return '<div class="embed-container">' . $code . '</div>';
}

add_filter( 'embed_oembed_html', 'embed_responsive_autoplay');
add_filter( 'video_embed_html', 'embed_responsive_autoplay' ); // Jetpack

thưởng thức


Vui lòng không kết xuất khối mã, có thể chỉnh sửa và thêm một số giải thích cho nó.
Hồi giáo Mayeenul

1

Đăng chéo câu trả lời của tôi từ https://stackoverflow.com/a/55053642/799327 , hy vọng điều đó không sao vì nó từ cùng một OP:


Vì vậy, sau một số nghiên cứu về điều này, cách tốt nhất để làm điều này là tận dụng oembed_fetch_urlmóc lọc để thêm các đối số bổ sung vào URL yêu cầu oEmbed. Mục tiêu cụ thể của tôi là cho phép một tham số tự động phát, nhưng phương thức này được xây dựng để dễ dàng điều chỉnh theo bất kỳ đối số oEmbed nào bạn cần.

Đầu tiên, thêm phần này vào functions.php:

<?php
/**
 * Add parameters to embed
 * @src https://foxland.fi/adding-parameters-to-wordpress-oembed/
 * @src https://github.com/WordPress/WordPress/blob/ec417a34a7ce0d10a998b7eb6d50d7ba6291d94d/wp-includes/class-oembed.php#L553
 */
$allowed_args = ['autoplay'];

function koa_oembed_args($provider, $url, $args) {
    global $allowed_args;

    $filtered_args = array_filter(
        $args,
        function ($key) use ($allowed_args) {
            return in_array($key, $allowed_args);
        },
        ARRAY_FILTER_USE_KEY
    );

    foreach ($filtered_args as $key => $value) {
        $provider = add_query_arg($key, $value, $provider);
    }

    return $provider;
}

add_filter('oembed_fetch_url', 'koa_oembed_args', 10, 3);

Hàm này lấy URL oEmbed được tạo và các đối số tương ứng của nó và kiểm tra lại nó một danh sách mã hóa cứng của các đối số được liệt kê trong danh sách, trong trường hợp này ['autoplay']. Nếu nó nhìn thấy bất kỳ từ khóa được liệt kê trong danh sách trắng nào trong các đối số được chuyển đến bộ lọc oEmbed, thì nó sẽ thêm chúng với giá trị đã cho vào URL oEmbed.

Sau đó, tất cả những gì bạn cần làm là thêm tham số oEmbed vào shortcode của bạn trong trình soạn thảo Wordpress, như sau:

[embed autoplay="true"]https://vimeo.com/1234567890/1234567890[/embed]

Xin lưu ý rằng lớp oEmbed trong WP sử dụng postmeta làm bộ đệm cho các yêu cầu này, vì vậy nếu bạn đã nhúng URL mục tiêu trước đó, bạn có thể phải xóa bộ nhớ cache postmeta theo cách nào đó hoặc thêm một loại buster cache nào đó vào URL mục tiêu. Nếu liên kết nằm trong bộ đệm, hook bộ lọc sẽ không bao giờ chạy được.

Tôi hy vọng điều này có ý nghĩa, vì tôi cảm thấy như đó là một tính năng khá hữu ích, thật khó để tìm ra cách đạt được.


0

Bất cứ điều gì sau tham số đầu tiên phải được gửi dưới dạng một mảng các đối số.

Xem ví dụ được đưa ra trên trang codex.
http://codex.wordpress.org/Function_Reference/wp_oembed_get

Nếu bạn đang cố lấy một giá trị trường tùy chỉnh và có mã nhúng chuyển đổi nó thành video (nghĩa là điều gì sẽ xảy ra nếu bạn đặt nó vào nội dung), thì bạn có thể làm điều gì đó như thế này ...

/*
   N - replace with a valid post ID
   key - replace with a valid custom field key(name)
*/
$data = get_post_meta( N, 'key', true );
if( $data )
   echo apply_filters( 'the_content', $data );

Điều này tất nhiên sẽ chạy một số bộ lọc trên dữ liệu mà bạn không cần, nhưng nó thực sự lừa tất cả ..


1
Thật không may, các đối số duy nhất mà wp_oembed_get sẽ lắng nghe là 'chiều rộng' và 'chiều cao'
John P Bloch

Đoán xem không có thông qua trong đó arg .. ít nhất là không sử dụng wp_oembed_get ..
t31os

Vâng; theo như tôi biết (mặc dù tôi có thể sai về điều này) API oEmbed của youtube hoàn toàn không cho phép tranh luận.
John P Bloch

Tôi đã đào sâu vào phần nhúng, và theo như tôi có thể nói (như bạn đã nói), các đối số duy nhất được truyền qua là chiều cao và chiều rộng .. (dễ kiểm tra, gọi hàm func với một mảng được truyền vào, không ' t làm việc với autoplay, mặc dù chiều rộng và chiều cao làm việc).
t31os

Cảm ơn mọi người, tôi sẽ phải xem xét một giải pháp khác.
phê bình

0

Sau tất cả các nghiên cứu những gì tôi tìm thấy là đây. dưới đây là mã.

function iweb_modest_youtube_player( $html, $url, $args ) {
    return str_replace( '?feature=oembed', '? 
    feature=oembed&modestbranding=1&showinfo=0&rel=0', $html );
}
add_filter( 'oembed_result', 'iweb_modest_youtube_player', 10, 3 );

Tín dụng vào https://gist.github.com/mustardBees/7704269#file-fifts-php .

Cảm ơn!


-5

Điều này có thể dễ dàng sửa bằng cách sửa đổi hàm wp_oembed_get () trong wp-gộp / media.php thành:

function wp_oembed_get( $url, $args = '' ) {
    // Manually build the IFRAME embed with the related videos option disabled and autoplay turned on
    if(preg_match("/youtube.com\/watch\?v=([^&]+)/i", $url, $aMatch)){
        return '<iframe width="560" height="315" src="http://www.youtube.com/embed/' . $aMatch[1] . '?rel=0&autoplay=1" frameborder="0" allowfullscreen></iframe>';
    }

    require_once( ABSPATH . WPINC . '/class-oembed.php' );
    $oembed = _wp_oembed_get_object();
    return $oembed->get_html( $url, $args );
}

Ngoài ra, hãy chắc chắn chạy truy vấn SQL sau đây sau khi bạn thực hiện thay đổi này để nhúng được làm mới: XÓA TỪ wp_postmeta WHERE meta_key THÍCH '_oembed_%'
interimpulso

2
Bạn không thể cập nhật WP nữa sau khi bạn làm điều này. Không được khuyến khích.
fuxia

2
Sửa đổi cốt lõi chỉ là một ý tưởng tồi.
Philip Downer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.