web-dev-qa-db-ja.com

wp_update_postがHTMLのサンプルコードを台無しにしないようにするにはどうすればよいですか?

フロントエンドでHTML/PHPコードの例を少し示しています(構文の強調表示付き)。エントリはFAQカスタム投稿として表示され、メニューの順序を変更するプラグイン(CMSツリーページ)があり、これらが表示されます。順序を変更するたびに、_wp_update_post_、ID、_menu_order_、_post_parent_、_post_type_を更新します。デバッグの場合、更新の直前と直後に_post_content_プロパティを出力します。そしてそれは恐ろしい方法で変更されます。

以前(正しい):

_[html light="true"]</body>[/html]
_

後(乱雑):

_[html light="true"]</body>[/html]
_

私がそれを数回行うと、元に戻すことが地獄のようになります。

_[html light="true"]</body>[/html]
_

_ENT_NOQUOTES_がhtmlspecialchars()にキャストされているように見えます...

これらは「ソースコード」ビューからのものであり、フロントエンドではないことに注意してください。ブラウザは「Before」状態を正しく処理し、次のようにレンダリングします

_</body>
_

乱雑にならないようにするにはどうすればよいですか?

3

https://wordpress.org/plugins/syntaxhighlighter/ プラグインの障害でした。その中にいくつかの関数があります。つまり、encode_shortcode_contents_slashed_noquickeditencode_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'],'&amp;lt;') !== false
            || strpos($data['post_content'],'&amp;nbsp;') !== false
            || strpos($data['post_content'],'&amp;gt;') !== false
            )){
        $data['post_content'] = htmlspecialchars_decode($data['post_content']);
    }
    return $data;
}

add_action( 'wp_insert_post_data', 'wpse190396_insert_post_data', 10, 2 );
1