フロントエンドでHTML/PHPコードの例を少し示しています(構文の強調表示付き)。エントリはFAQカスタム投稿として表示され、メニューの順序を変更するプラグイン(CMSツリーページ)があり、これらが表示されます。順序を変更するたびに、_wp_update_post
_、ID
、_menu_order
_、_post_parent
_、_post_type
_を更新します。デバッグの場合、更新の直前と直後に_post_content
_プロパティを出力します。そしてそれは恐ろしい方法で変更されます。
以前(正しい):
_[html light="true"]</body>[/html]
_
後(乱雑):
_[html light="true"]&lt;/body&gt;[/html]
_
私がそれを数回行うと、元に戻すことが地獄のようになります。
_[html light="true"]&amp;amp;lt;/body&amp;amp;gt;[/html]
_
_ENT_NOQUOTES
_がhtmlspecialchars()
にキャストされているように見えます...
これらは「ソースコード」ビューからのものであり、フロントエンドではないことに注意してください。ブラウザは「Before」状態を正しく処理し、次のようにレンダリングします
_</body>
_
乱雑にならないようにするにはどうすればよいですか?
https://wordpress.org/plugins/syntaxhighlighter/ プラグインの障害でした。その中にいくつかの関数があります。つまり、encode_shortcode_contents_slashed_noquickedit
、encode_shortcode_contents_callback
。
今私はそれを https://wordpress.org/plugins/crayon-syntax-highlighter/ に置き換えましたが、私がすでに解決策を書いていた他のプラグインの障害であることを確認したときまでに。
function wpse190396_insert_post_data($data, $postarr){
if($postarr['filter'] == 'db'
&& ($data['post_type'] == 'fix' || $data['post_type'] == 'faq')
&& (strpos($data['post_content'],'&lt;') !== false
|| strpos($data['post_content'],'&nbsp;') !== false
|| strpos($data['post_content'],'&gt;') !== false
)){
$data['post_content'] = htmlspecialchars_decode($data['post_content']);
}
return $data;
}
add_action( 'wp_insert_post_data', 'wpse190396_insert_post_data', 10, 2 );