Strict Standards: Only variables should be passed by reference in wordpress/wp-includes/class-oembed.php on line 116

末鹿安然 提交于 2019-12-24 04:44:08

问题


I've had a look at a lot of the similar questions and I'm not getting it, with regards to my code.

The Error : Strict Standards: Only variables should be passed by reference in wordpress/wp-includes/class-oembed.php on line 116

and here is my code....

// Get Ready Display the Audio
$embedCheck     = array("<embed", "<ifram");// only checking against the first 6
$mykey_values   = get_post_custom_values('_format_audio_embed');
$content_oembed = '';

// check if the audio metabox is used
if ( isset($mykey_values) && !empty($mykey_values) ) {
    // iterate over values passed
    foreach ( $mykey_values as $key => $value ) {
         $url = $value;
         $wtf = wp_oembed_get($url);
         if ( !empty($url) ) {
            $firstCar = substr($url, 0, 6); // get the first 6 char.

            // if its a http(s).
            if ( strpos($firstCar, "http:/" ) !== false || strpos($firstCar, "https:" ) !== false ) {
                // send it to wp_oembed to see if the link is oembed enabled.


                    $content_oembed = ($wtf !==false)
                  ? ('"<div class="audio" style="width:100%; overflow:hidden;">' .$wtf.'</div>')
                  : ('<audio src="'.$url.'" preload="none" type="audio/mpeg"></audio>');
            }

            // if its the embed code that matches our array defined above.
            else if ( audio_strpos_arr($firstCar, $embedCheck ) !== false ) {
                $content_oembed = '<div class="video" style="width:100%; overflow:hidden;">' .$url. '</div>';

            }
        }
    }; // end foreach
} // end conditional

If I remove the section in the conditional below the comment "send it to wp_oembed to see if the link is oembed enabled.", but stranger still if I pass it a soundcloud link - no error, but if its a locally hosted file it goes tits up.

Any Help would be greatly appreciated.

after a bit of fidling - seems the problem is related to this function http://codex.wordpress.org/Function_Reference/wp_oembed_get

and what thats referencing in the incldued class-oembed.php says the following on line 116

112         function discover( $url ) {
113                 $providers = array();
114 
115                 // Fetch URL content
116                 if ( $html = wp_remote_retrieve_body( wp_safe_remote_get( $url ) ) ) {

回答1:


You should not use assignments (=) inside your ternary expression as you will run into problems with operator precedence.

You could write it like:

$content_oembed = (wp_oembed_get($url) !==false)
                  ? ('<div class="audio" style="width:100%; overflow:hidden;">' . wp_oembed_get($url).'</div>')
                  : ('<audio src="'.$url.'" preload="none" type="audio/mpeg"></audio>');



回答2:


for the time being I'm avoided using wp_oembed_get altogether by swopping my conditionals and if its not an iframe or using the following which seems to determine whether its a locally hosted, or oembed link automagically....

global $wp_embed;
$post_embed = $wp_embed->run_shortcode('[embed]'.$url.'[/embed]');

and then echo'ing $post_embed



来源:https://stackoverflow.com/questions/18041225/strict-standards-only-variables-should-be-passed-by-reference-in-wordpress-wp-i

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!