ショートコードを用いたPHPコードがうまく表示できない
-
ショートコードで、指定した<h2>配下の<h3>〜<h6>のタイトルタグのリスト表示をしたいと思っています。
例えば、以下のようなHTMLの場合に<h2>h2-1</h2> <h3>h2-1 h3-1</h3> <h3>h2-1 h3-2</h3> <h3>h2-1 h3-3</h3> <h2>h2-2</h2> <h3>h2-2 h3-1</h3> <h3>h2-2 h3-2</h3> <h3>h2-2 h3-3</h3> <h2>h2-3</h2> <h3>h2-3 h3-1</h3> <h3>h2-3 h3-2</h3> <h3>h2-3 h3-3</h3>
[test_code h2_index=”2″]とすると、
<h3>h2-2 h3-1</h3> <h3>h2-2 h3-2</h3> <h3>h2-2 h3-3</h3>
と表示させるようにしたいです。
以下のコードは作成中なのですが、現時点でも$h2_index_content
は指定した<h2>配下の、<h2>を除いたタイトル行のリストとなるはずなのですが、確認すると$h2_index_content
には上記の一番初めのhtmlと同様に記事内全ての<h2>と<h3>のタイトルが表示されてしまいます(なぜか<h4>以下は表示されない)function _test_code( $atts ) { $args = shortcode_atts( array( 'h2_index' => '', ), $atts ); $post = get_post(); $content = $post->post_content; $headers = array(); preg_match_all( '/<([hH][1-6]).*?>(.*?)<\/[hH][1-6].*?>/u', $content, $headers ); // $h2_indexが空でなかった場合、$headersの値を$h2_indexで指定した内容のみに変更する if ($args['h2_index'] !== ''){ //$this->atts表記を$args変更 // h2_index の引数を取得 $h2_index = intval($args['h2_index']); //$this->atts表記を$args変更 //$headers[0][](タグ全部) のh2タグが$h2_index番目から次のh2までを抜き出す if ($h2_index > 0 && $h2_index <= count($headers[0])) { // h2_indexが有効な範囲にある場合の処理 $count_h2 = 0; // h2タグのカウントを初期化 $h2_index_content = ''; // 抜き出したh2タイトルhtml行を格納する変数 //$headers[0](タイトルタグ全部を配列で格納した変数) を順番に処理する foreach ($headers[0] as $tag) { // 今持っているタグがh2タグだったら、$count_h2にカウントを増やす if (preg_match('/<h2\b[^>]*>/', $tag)) { //今持ってるタグがh2かどうか $count_h2++; //h2なら$count_h2に1足す } if ($count_h2 > $h2_index) { //指定していたh2の順番より今持っているh2タグの順番の方が後ろの場合 break; } elseif ($count_h2 == $h2_index && !preg_match('/<h2\b[^>]*>/', $tag) ) { //h2タグカウンタが指定した順番と一致していて、h2タグではない(=h3〜h6)場合 $h2_index_content .= $tag; } } } // 配列の内容を表示する $h2_index_content = $headers[0][$h2_index] . ' ' . $headers[1][$h2_index] . ' ' . $headers[2][$h2_index]; // ヘッダーの内容を表示する $matches_string = var_export($headers, true); $output = '<pre>' . $matches_string . '</pre>'; // $h2_index_content も表示する $output .= '<div>' . $h2_index_content . '</div>'; return $output; } } add_shortcode('test_code', '_test_code');
PHP初心者で、大変恐縮なのですが、ご教示いただけますと幸いです。
よろしくお願いします。
- トピック「ショートコードを用いたPHPコードがうまく表示できない」には新たに返信することはできません。