web-dev-qa-db-fra.com

get_page_by_title avec une apostrophe dans la variable

J'ai quelques problèmes pour créer un shortcode qui interroge certains messages. Voici les bases de mon code:

function shortcode_equipment($atts, $content = null) {

   $equipment = get_page_by_title($content, OBJECT, 'equipment');

   $loop = new WP_Query( array(
   'posts_per_page'    => 1,
   'post_type'         => 'equipment',
   'page_id'         => $equipment->ID
    ) );

   while( $loop->have_posts() ) { $loop->the_post();

   *misc code*

   wp_reset_postdata();
     return $string;
   }

}

add_shortcode( 'item', 'shortcode_equipment' );

Maintenant, normalement, cela fonctionne bien pour 99% de mes messages. Il interroge la publication en fonction de ce qui est écrit à l'intérieur du titre [item] et ajoute ici un shortcode [/ item], puis affiche un effet d'infobulle/survol personnalisé en conséquence.

Toutefois, si le titre de mon message contient une apostrophe (ex: Mal's Post), il est alors interrompu et interroge le dernier message de ce type de message personnalisé.

Alors, comment puis-je obtenir que cela fonctionne avec des apostrophes dans les titres des publications?

1
Malachi Draven

Title Hello world!@#$%^*(),.;:\ fonctionnera mais tout titre saisi contenant des caractères ' " < > & ne fonctionnera pas car dans la variable $content que vous avez échappé Entités HTML , Mal's Post devient Mal&#8217;s Post.

Pour le contourner, vous pouvez utiliser sanitize_title function avec get_page_by_path .

function shortcode_equipment($atts, $content = null) {
   $path = sanitize_title($content);

   $equipment = get_page_by_path( $path, OBJECT, 'equipment');

Le reste du code fonctionne comme avant.

2
Greg36

Il y a très probablement un problème qui se passe là-bas. Essayez d'échapper au titre avant de le transmettre à votre shortcode, en utilisant sanitize_title_for_query(), sanitize_title() ou même esc_html():

$content   = sanitize_title_for_query( $content );
$equipment = get_page_by_title( $content, OBJECT, 'equipment' );

Plus d'informations sur les données d'échappement peuvent être trouvées ici .

1
Jack Johansson