web-dev-qa-db-fra.com

Comment puis-je empêcher wp_update_post de gâcher un exemple de code HTML?

Je montre de petits morceaux d'exemple de code HTML/PHP sur le frontend (avec mise en évidence de la syntaxe). Les entrées sont affichées sous la forme FAQ publications personnalisées, et ont un plugin (page d'arborescence CMS) pour modifier l'ordre du menu, auquel elles sont affichées. Chaque fois que je change l'ordre, il appelle un wp_update_post, Mise à jour ID, menu_order, post_parent, post_type. Pour le débogage, je génère la propriété post_content Juste avant la mise à jour , et juste après, et ça change horriblement.

Avant (correct):

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

Après (désordre):

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

Si je le fais plusieurs fois, cela deviendra un enfer vivant pour revenir:

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

Il ressemble exactement à htmlspecialchars() avec ENT_NOQUOTES A été coulé dessus ...

Veuillez noter que ceux-ci proviennent de la vue "code source" et non de l'interface. Les navigateurs gèrent correctement l'état "Avant" et le rendent comme

</body>

Comment puis-je l'empêcher de devenir salissant?

3

C'était https://wordpress.org/plugins/syntaxhighlighter/ faute du plugin. Il contient certaines fonctions qui ont quelque chose à voir avec cela, à savoir encode_shortcode_contents_slashed_noquickedit, encode_shortcode_contents_callback.

Maintenant, je l'ai remplacé par https://wordpress.org/plugins/crayon-syntax-highlighter/ mais au moment où j'ai confirmé que c'était la faute de l'autre plugin, j'avais déjà écrit une solution.

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