web関連
【SQL】ACFのコメントアウトをそのまま出力する方法
Advance Custom fieldsを使って作った「メモ」用のテキストエリアに入っているコメントアウトをそのまま出力したかったときの備忘録
SQLを使って出力
Advance Custom fieldsのthe_field()
を使って出力をしようとするとコメントアウトが出力されないのでSQLを使って出力する
記事などのデータはwp_posts
記事にまつわるACFのデータはwp_postmeta
に格納されている
<?php
global $wpdb;
$ID = get_the_ID();// ページのID取得
$results = $wpdb->get_results( "
SELECT meta_value
FROM $wpdb->posts, $wpdb->postmeta
WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id AND
$wpdb->posts.post_status = 'publish' AND
$wpdb->posts.post_type = '投稿タイプ(slug)' AND
$wpdb->postmeta.meta_key = 'カスタムフィールドキー' AND
$wpdb->posts.ID = $ID
");
echo '<pre><code>'.$results[0]->{"meta_value"}.'</code></pre>';
?>
これでACFのテキストフィールド「メモ」をコメントアウト付で出力できた
追記:20210507、htmlspecialchars無いと駄目だ
xammp環境ではコメントアウト出力で来たんだけど、本番環境(エックスサーバー)で同じコード使ったら出力されなかった
調べたらhtmlspecialchars
を使ってHTMLエンティティを行わないとコメントアウトはHTMLとして処理されてしまうみたい
↓修正後のソースコード
echo '<pre><code>'.htmlspecialchars($results[0]->{"meta_value"}).'</code></pre>';
htmlspecialchars
はタグ(<p></p>
)のような文字列をHTMLと認識させずにブラウザにそのまま出力するときに使う
↓HTMLエンティティ前
<p></p>
↓HTMLエンティティ後
<p></p>
the_field()を修正してコメントアウトも出力されるようにできればよかったんだけどSQLの方が早いかなと思いSQLでやった
htmlspecialchars
関数を使ってHTMLエンティティ化させるみたい本番環境ではHTMLエンティティ化(エスケープ)の処理が必要だった