web-dev-qa-db-fra.com

Code HTML dans le champ personnalisé

J'utilise un champ personnalisé pour afficher des images dans un curseur sur chaque message, mais lorsque je met à jour le message après avoir entré le code HTML dans le champ personnalisé, le code disparaît. Je suppose qu'il existe un type de filtre qui supprime le code HTML des champs personnalisés lorsqu'un message est enregistré. Y a-t-il un moyen de contourner cela sans utiliser de plugin?

Merci!

Modifier: les informations sont enregistrées à l'aide du code suivant:

function save_details(){
    global $post;

    update_post_meta($post->ID, "ptime", $_POST["ptime"]);
    update_post_meta($post->ID, "services", $_POST["services"]);
    update_post_meta($post->ID, "tools", $_POST["tools"]);
    update_post_meta($post->ID, "url", $_POST["url"]);
    update_post_meta($post->ID, "images", $_POST["images"]);
}

Vous pouvez trouver le code complet functions.php ici (Pastebin).

2
Anders Norén

RÉPONSE MISE À JOUR

La fonction correcte à utiliser dans le contexte de WordPress et de l’API prévue à cet effet est la suivante:

esc_textarea

Ainsi, votre code refléterait quelque chose comme ceci;

<textarea><?php echo esc_textarea($images);?></textarea>

Bien que htmlspecialchars et htmlentities puissent être utilisés, et même si esc_textarea encapsule htmlspecialchars de toute façon, il est plus approprié d’utiliser l’appel d’API officiel.

J'ai laissé ma réponse originale ci-dessous à des fins de référence, mais permutez les fonctions pertinentes au besoin.

RÉPONSE ORIGINALE

Dans votre copie de Pastebin, remplacez votre fonction images_box par(début de la ligne 65);

function images_box($echo = FALSE){
  global $post;
  $custom = get_post_custom($post->ID);
  $images = $custom["images"][0];
  ?>
  <textarea name="images" cols="100" rows="10">

      <?php echo htmlspecialchars($images); //Hi, I'm your input! ?> 

  </textarea>
  <?php
}

Vous ne faisiez pas écho à la valeur de votre entrée entre les balises <textarea> ECHO INPUT HERE </textarea>, il semble donc que vous n'entriez rien du tout.

Enveloppez également votre entrée avec htmlspecialchars

De plus, $city = $custom["images"][0]; devrait être $images = $custom["images"][0];(ligne 68)

2
userabuser