4

WordPress から Drupal にいくつかのコンテンツを移行した後、いくつかのショートコードを変換する必要があります。

文字列の内容:

無関係なテクスト... [sublimevideo class="sublime" poster="http://video.host.com/_previews/600x450/sbx-60025-00-da-ANA.png" src1="http://video. host.com/_video/H.264/LO/sbx-60025-00-da-ANA.m4v" src2="(hd) http://video.host.com/_video/H.264/HI/sbx- 60025-00-da-ANA.m4v " width="560" height="315"] ..もっと無関係なテキスト。

ショートコード [sublimevideo ...] 内のすべての変数を見つけて、配列に変換する必要があります。

Array (
    class => "sublime"
    poster => "http://video.host.com/_previews/600x450/sbx-60025-00-da-FMT.png"
    src1 => "http://video.host.com/_video/H.264/LO/sbx-60025-00-da-FMT.m4v"
    src2 => "(hd)http://video.host.com/_video/H.264/HI/sbx-60025-00-da-FMT.m4v"
    width => "560"
    height => "315"
)

そしてできればショートコードの複数のインスタンスを処理してください。

preg_match_all() で実行できると思いますが、運がありませんでした。

4

4 に答える 4

10

これにより、必要なものが得られます。

$data = 'Irrelevant tekst... [sublimevideo class="sublime" poster="http://video.host.com/_previews/600x450/sbx-60025-00-da-ANA.png" src1="http://video.host.com/_video/H.264/LO/sbx-60025-00-da-ANA.m4v" src2="(hd)http://video.host.com/_video/H.264/HI/sbx-60025-00-da-ANA.m4v" width="560" height="315"] ..more irrelevant text.';

$dat = array();
preg_match("/\[sublimevideo (.+?)\]/", $data, $dat);

$dat = array_pop($dat);
$dat= explode(" ", $dat);
$params = array();
foreach ($dat as $d){
    list($opt, $val) = explode("=", $d);
    $params[$opt] = trim($val, '"');
}

print_r($params);

短いコードの処理で直面する次の課題を見越して、preg_replace_callback を使用して、短いタグ データをその結果のマークアップに置き換えることができます。

$data = 'Irrelevant tekst... [sublimevideo class="sublime" poster="http://video.host.com/_previews/600x450/sbx-60025-00-da-ANA.png" src1="http://video.host.com/_video/H.264/LO/sbx-60025-00-da-ANA.m4v" src2="(hd)http://video.host.com/_video/H.264/HI/sbx-60025-00-da-ANA.m4v" width="560" height="315"] ..more irrelevant text.';

function processShortCode($matches){
    // parse out the arguments
    $dat= explode(" ", $matches[2]);
    $params = array();
    foreach ($dat as $d){
        list($opt, $val) = explode("=", $d);
        $params[$opt] = trim($val, '"');
    }
    switch($matches[1]){
        case "sublimevideo":
            // here is where you would want to return the resultant markup from the shorttag call.
             return print_r($params, true);        
    }

}
$data = preg_replace_callback("/\[(\w+) (.+?)]/", "processShortCode", $data);
echo $data;
于 2013-08-12T20:59:33.350 に答える
7

次の正規表現を使用して、変数を一致させることができます。

$regex = '/(\w+)\s*=\s*"(.*?)"/';

最初に sublimevideo ショートコードを照合し、それを次の正規表現を使用して文字列にすることをお勧めします。

$pattern = '/\[sublimevideo(.*?)\]/';

正しい配列キーを取得するために、次のコードを使用しました。

// $string is string content you specified
preg_match_all($regex, $string, $matches);

$sublimevideo = array();
for ($i = 0; $i < count($matches[1]); $i++)
    $sublimevideo[$matches[1][$i]] = $matches[2][$i];

これは次の配列を返します: (あなたが要求したもの)

Array
(
    [class] => sublime
    [poster] => http://video.host.com/_previews/600x450/sbx-60025-00-da-ANA.png
    [src1] => http://video.host.com/_video/H.264/LO/sbx-60025-00-da-ANA.m4v
    [src2] => (hd)http://video.host.com/_video/H.264/HI/sbx-60025-00-da-ANA.m4v
    [width] => 560
    [height] => 315
)
于 2013-08-12T20:57:10.003 に答える
-1

この回答で説明されているように、関数を使用して WordPress に作業を任せることをお勧めしget_shortcode_regex()ます。

 $pattern = get_shortcode_regex();
 preg_match_all("/$pattern/",$wp_content,$matches);

これにより、操作が簡単な配列が得られ、コンテンツ内のさまざまなショートコードと関連属性が表示されます。これは最も明白な配列形式ではないため、必要なデータの操作方法がわかるように、印刷して見てください。

于 2014-09-25T15:41:54.163 に答える