6

「[[133]]」のようなショートコードを画像に置き換えるために、PHPでWordpressのショートコードスタイルの機能を作成しようとしています。基本的に、IDが1〜150の画像URL /タイトル/サブタイトルのMySQLテーブルがあり、次のようなショートコードを使用してページのテキストに動的に挿入できるようにしたいと考えています。

Blabla bla blablabla。[[5]]また、bla bla bla bla bla [[27]]ねえ、そしてbla bla bla![[129]]

したがって、IDを$ idとして取得し、それをmysql_query( "SELECT title、subtitle、url FROM images WHERE id = $ id")のようなMySQLクエリにフィードして、「[[id]]を置き換えます。 "img / title/subtitleで。同じページでこれを複数回実行できるようにしたいと思います。

これには正規表現とpreg_match、preg_replace、strstr、strpos、substr ...の組み合わせが必要であることはわかっていますが、どこから始めればよいのか、どの関数を使用してどの機能を実行するのかわかりません。戦略をお勧めできますか?コード自体は必要ありません。どの部分に何を使用するかを知っているだけで、非常に役立ちます。

4

5 に答える 5

9

このようなショートコードを記述できるようにしたい場合:

[[function_name_suffix parameter1 parameter2 ...]]

preg_replace_callbackこれは、パラメータ化されたショートコードを使用しcall_user_func_arrayて実装する、より完全な方法です。

function shortcodify($string){
    return preg_replace_callback('#\[\[(.*?)\]\]#', function ($matches) {
        $whitespace_explode = explode(" ", $matches[1]);
        $fnName = 'shortcode_'.array_shift($whitespace_explode);
        return function_exists($fnName) ? call_user_func_array($fnName,$whitespace_explode) : $matches[0];
    }, $string);
}

この関数が定義されている場合:

function shortcode_name($firstname="",$lastname=""){
    return "<span class='firstname'>".$firstname."</span>&nbsp;<span class='lastname'>".$lastname."</span>";
}

次に、この呼び出し

print shortcodify("My name is [[name armel larcier]]");

出力します:

My name is <span class='firstname'>armel</span>&nbsp;<span class='lastname'>larcier</span>

これは、supertrue のアイデアに基づいて、私が今実装したものです。

フィードバックは大歓迎です。

于 2014-09-08T14:17:41.147 に答える
4

getimage($id)MySQL クエリを実行し、置換テキストをフォーマットする関数を使用すると、必要なことはほぼすべて実行されます。

$text = "Blabla [[5]] and [[111]] bla bla bla [[27]] and bla bla bla! [[129]]";

$zpreg = preg_match_all('#\[\[(\d{1,3})\]\]#', $text, $matches );

var_dump( $matches[1] );  

$newtext = preg_replace('#\[\[(\d{1,3})\]\]#', getimage($matches[1][?????]), $text);

echo $newtext;

getimage()右の画像に適切な画像を配置するために、内部に何を配置するか (どこに ????? があるか) を把握する必要があります[[id]]

詳細についてはpreg_match_allpreg_replace公式ドキュメントを参照してください。

于 2011-01-04T01:55:12.820 に答える
1

これには、電気ショック療法の表示方法に応じて、さまざまなアプローチをとることができます。

「こんにちは[34]世界」という文を取ります

replaceCode($ string)などの単純な関数を作成します

function replaceCode($string){

    $pos = strpos($string, '['); // Find the first occurrence of the bracket

    if($pos != false){

          // If everything is ok take the next 2 numbers from it

          // Check for a close bracket & remove ]

          // call another function to replace the number with the image text

    }




}

角かっこがこれ以上見つかった場合は、関数を再帰的に再度呼び出し、残りの文字列を関数に再度渡します。

注:[と]のバランスが適切であることを確認するために、最初に検証を行う必要がある場合があります。

于 2010-12-31T17:24:25.767 に答える
0

正規表現は次のようになると思います。

/\[\[[1-9]{1,3}\]\]/g

(二重括弧内の1から3桁の数字の場合。)

于 2010-12-31T06:14:13.030 に答える