2010-12-31 4 views
6

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

Blabla bla bla bla bla。 [[5]]また、bla bla bla bla bla [27] ねえ、bla bla bla! [[129]]

だから、私はちょうど$ IDとしてIDを取得したい、その後、 するmysql_query( "タイトルを選択、字幕、ID = $ IDを画像からURL" のようなMySQLのクエリにそれを養います) "[[id]]"をimg/title/subtitleに置き換えます。私は同じページでこれを何度もやりたいと思っています。

これはregexとpreg_match、preg_replace、strstr、strpos、substrのいくつかの組み合わせを必要としていることは知っていますが、どこから始めるべきか、どの機能を使うべきか分かりません。あなたは戦略を推薦できますか?私はコード自体は必要ありません。どの部分をどのように使うべきかを知っているだけで、非常に役に立ちます。

+0

注 - これはWordpressサイト用ではないため、既存のWPショートコード機能を使用することはできません。 – supertrue

+0

これにはpreg_replace_callbackも関係するのでしょうか? – supertrue

+0

私は推測を念頭に置いて、おそらくWordPressから関連するコードを簡単に抽出することができると言います。あるいは、カイルが提案したことを実行して、独自のソリューションを作成するための多くのアプローチの1つを使用することができます。 –

答えて

4

、このはほとんどはあなたが必要なすべてのことを行います。

$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()(どこの内側に配置するかを把握する必要があります? ?is)それは右の画像の右に入れます[[id]]

詳細については、preg_match_allおよびpreg_replaceを公式ドキュメントで参照してください。

0

正規表現、私は信じているであろう:

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

1

様々な異なるアプローチが、このために採取に依存することができる(二重括弧内の1対3桁の数字のために)。あなたは "こんにちは[34]世界"

は、単純な関数などのreplaceCode($文字列)

を作成

が文を取り、電気ショック療法を表示することを計画か

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 

    } 




} 

大括弧が見つかった場合は、再帰的に関数を呼び出して残りの文字列を関数に再度渡します。

注:[と]が適切にバランスされるようにするには、まず検証が必要な場合があります。 MySQLのクエリを行い、置換テキストをフォーマット機能getimage($id)

5

あなたは、このようなショートコード書くことができるようにしたい場合:ここ

[[function_name_suffix parameter1 parameter2 ...]] 

をパラメータ化ショートコードを実装するためにpreg_replace_callbackcall_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のアイデア。

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

+0

ああ、私はPHP 5.4以降で動作すると思っていました。最初の試みでは働きません。次に、関数名にタイプミスがあることがわかりました。 shortcodify()関数を呼び出しますが、shortcodifiy()として定義されています - "i"が差をつけます。私はあなたのためにこれを修正しました。 – Hexodus

+1

ニースキャッチ。どうもありがとう! –

0

私の賭けはPHP's strtr機能...

<?php 
function get_profile_image($image_url){ 
    return "<img src='{$image_url}' height='200px' width='200px' />"; 
} 

$trans = array(
    "[[1]]" => "Vishal", 
    "[[2]]" => "Kumar", 
    "[[3]]" => "Sahu", 
    "[[4]]" => "Web Designer", 
    "[[5]]" => "Draw and Paint", 
    "[[6]]" => ucwords("any programming language"), 
    "[[7]]" => strtoupper("PHP, JAVASCRIPT and HTML"), 
    "[[8]]" => get_profile_image("http://php.net/images/logos/php-logo.svg"), 
    "[[9]]" => "http://php.net/images/logos/php-logo.svg" 
    ); 
$str = <<<HEREDOC_1 
[[8]] 
<pre>My name is [[1]] [[2]] [[3]]. 
I am a [[4]] and I love to [[5]]. 
I don't know [[6]] but I know [[7]] little bit.</pre> 
Here is my profile image <img src='[[9]]' alt='[[1]]-[[2]]-[[3]]-[[4]]' /> 
HEREDOC_1; 
echo strtr($str, $trans); 

あるそれは出力です

ある[http://php.net/images/logos/php-logo.svg]私の名前はヴィシャル・クマール Sahuです。私はWebデザイナーであり、私は描画とペイントが大好きです。私は知らない プログラミング言語ですが、私はPHP、JAVASCRIPT、HTMLを少し知っています ビット。ここは私のプロフィール画像です。[Vishal-Kumar-Sahu-Web Designer]

5.6ではうまくいきます。

+0

PHPドキュメントのページは変更しないでください。私はそれを@MegaTron:Dに追加します –

関連する問題