2016-01-21 87 views
0

因此,這裏是我在做什麼:我需要從一個簡碼提取變量,但我堅持

我有一個只包含一個嵌入式視頻簡碼後:

[視頻寬度= 「1280」 HEIGHT = 「720」 的MP4 = 「HTTP://myurl/wp-content/uploads/2016/01/VID_20160114_202806.mp4」] [/視頻]

我要的是,「 mp4「變量,除了根據編碼可能有不同的名稱,假設我只需要[2]值。

請記住,上面的簡碼是帖子裏面的所有內容。這是我做的:

$atts = array(); 
$atts = shortcode_parse_atts($post->post_content); 
//then I use $atts[2]; 

這失敗慘了。 我得到通知如下:Undefined offset: 2

如果我運行一個print_r,這是扭曲陣列我得到:

Array 
(
    [0] => [video 
    [width] => 1280 
    [height] => 720 
    [1] => mp4=" http:="" myurl="" wp-content="" uploads="" 2016="" 01="" vid_20160114_202806.mp4"][="" video] 

(誠然,這是一個事實,即它是一個html中的印刷變得更糟標記,它佔所有這些引號;要點是,提取參數失敗)

我的數字$post->post_content不是shortcode_parse_atts想要的。它想要一串屬性。但是,那麼,我如何獲得屬性的字符串呢? (我知道,正則表達式,右)

+0

葉,你可以在這種情況下使用正則表達式 –

回答

2

這是簡碼應該如何設置:

function my_shortcode($atts){ 
    $atts = shortcode_parse_atts(array(
     //default values go here. 
    ), $atts); 
} 

現在,你應該正確地接收到的值,你打算和可$atts['width']$atts['height']$atts['mp4']訪問它們。

0

謝謝Ohgodwhy,我意識到這是要走的路。但是它會產生問題,因爲根據視頻的編碼,第三個值可能會有不同的名稱。

但是我用正則表達式解決(我不想......因爲懶惰......)

if (preg_match('%\[video \w+="\w+" \w+="\w+" \w+="(.*)"\]\[/video\]%', $post->post_content)) { 
     preg_match_all('%\[video \w+="\w+" \w+="\w+" \w+="(.*)"\]\[/video\]%', $post->post_content, $result); 

// now I can use $result[1][0] to get the video url; (I figured [1][0] by trial and error so don't ask why) 
相關問題