実現したいこと
カスタムフィールド(ACF)に書き込んだコードを、サイト上に表示ようとしており、読込書き出し自体は問題なく実装できています。
コード上のコメントや <?php ~ ?>で囲われた部分の色を変えたく、出力時にスタイル用のタグで囲みたいと考えています。
発生している問題・分からないこと
場所により 2行以上になる事もあるので、preg_replace での書換にして一行部分は囲めたのですが、複数行のphpコードが上手く囲めません。
正規表現が良く分かっていない事もあり、どのように書けば良いかわかりません。
記述の問題点や解決方法をご指南頂けるとありがたいです。
よろしくお願いいたします。
該当のソースコード
PHPコード
1<?php 2$code = get_field('code_field');3if (!$code){ return; }4$c_type = get_field('code_type');5$t_value = $c_type['value'] ? $c_type['value'] : '';6$t_label = $c_type['label'] ? $c_type['label'] : '';7// エンティンティティ8$code = str_replace('<', '<', $code);9// class追加10$c_change = array(11 '/\/\/(.*?)\n/' => '<span class="comm">//$1</span>'."\n",12 '/\/\*(.*?)\*\//' => '<span class="comm">/*$1*/</span>',13 '/<\?php[\s\S]*?\?>/' => '<span class="txt-php">$0</span>'14);15$c_target = array_keys($c_change);16$c_replace = array_values($c_change);17$code = preg_replace($c_target, $c_replace, $code);18?>19 20<div class="<?php echo $className . ' ' . $t_value; ?>">21 <p><?php echo $t_label; ?> コード</p>22 <?php 23 echo '<pre class="code-in"><code>';24 25 $code_ar = explode("\n", $code);26 foreach($code_ar as $ar){27 echo '<p>' . $ar . '</p>';28 } 29 echo '</pre></code>';30 ?>31</div>32
<div class="my-code cd-php"> <p>PHP コード</p> <pre class="code-in"><code><p><span class="txt-php"><?php </p><p><span class="comm">// "className"(投稿 追加CSS) </span></p><p>$className = !empty($block['className']) ? $block['className'] . ' my-code' : 'my-code'; </p><p><span class="comm">// カスタムフィールド呼び出し </span></p><p>$code = get_field('code_field'); </p><p>if (!$code){ return; } </p><p>$c_type = get_field('code_type'); </p><p>$t_value = $c_type['value'] ? $c_type['value'] : ''; </p><p>$t_label = $c_type['label'] ? $c_type['label'] : ''; </p><p><span class="comm">// エンティンティティ </span></p><p>$code = str_replace('<', '<', $code); </p><p><span class="comm">// class追加 </span></p><p>$c_change = array( </p><p> '/\/\/(.*?)\n/' => '<span class="comm"><span class="comm">//$1</span>'."\n", </span></p><p> '/\/\*(.*?)\*\<span class="comm">//' => '<span class="comm"><span class="comm">/*$1*/</span></span>', </span></p><p> '/<\?php[\s\S]*?\?></span>/' => '<span class="txt-php">$0</span>' </p><p>); </p><p>$c_target = array_keys($c_change); </p><p>$c_replace = array_values($c_change); </p><p>$code = preg_replace($c_target, $c_replace, $code); </p><p>?> </p><p> </p><p><div class="<span class="txt-php"><?php echo $className . ' ' . $t_value; ?></span>"> </p><p> <p><span class="txt-php"><?php echo $t_label; ?></span> コード</p> </p><p> <span class="txt-php"><?php </p><p> echo '<pre class="code-in"><code>'; </p><p> </p><p> $code_ar = explode("\n", $code); </p><p> foreach($code_ar as $ar){ </p><p> echo '<p>' . $ar . '</p>'; </p><p> } </p><p> echo '</pre></code>'; </p><p> ?></span> </p><p></div></p></pre></code></div>
試したこと・調べたこと
上記の詳細・結果
検索語句を変え、色々探し試してみたのですが、知識不足の為だと思いますが答えが見つかりませんでした。
補足
特になし

0 コメント