it-swarm.com.de

get_page_by_title mit einem Apostroph in Variable

Ich habe Probleme beim Erstellen eines Shortcodes, der einige Posts abfragt. Das sind die Grundlagen meines Codes:

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' );

Normalerweise funktioniert dies für 99% meiner Posts. Es fragt den Beitrag nach dem Inhalt des [item] -Titels ab und zeigt dann einen benutzerdefinierten Tooltip-/Hover-Effekt an.

Wenn jedoch in meinem Post-Titel ein Apostroph steht (z. B. Mal's Post), bricht er ab und fragt nur ab, was der letzte Post in diesem benutzerdefinierten Post-Typ ist.

Wie bringe ich das dazu, mit Apostrophen in den Post-Titeln zu arbeiten?

1
Malachi Draven

Titel Hello [email protected]#$%^*(),.;:\ wird funktionieren, aber jeder Titel, den Sie mit ' " < > & Zeichen eingeben, wird nicht funktionieren, da Sie in der $content Variable HTML-Entitäten Mal's Post zu Mal&#8217;s Post geworden sind.

Um dies zu umgehen, können Sie sanitize_title zusammen mit get_page_by_path verwenden.

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

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

Der Rest des Codes funktioniert wie zuvor.

2
Greg36

Dort ist höchstwahrscheinlich ein Problem aufgetreten. Versuchen Sie, den Titel zu umgehen, bevor Sie ihn an Ihren Shortcode übergeben, indem Sie sanitize_title_for_query(), sanitize_title() oder sogar esc_html() verwenden:

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

Weitere Informationen zur Datenflucht finden Sie hier .

1
Jack Johansson