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エンティティ後
&lt;p&gt;&lt;/p&gt;
ブラウザにHTMLとして読み込まれたくない時はhtmlspecialchars関数を使ってHTMLエンティティ化させるみたい
本番環境ではHTMLエンティティ化(エスケープ)の処理が必要だった

the_field()を修正してコメントアウトも出力されるようにできればよかったんだけどSQLの方が早いかなと思いSQLでやった

Leave a Comment

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。