wake-up-neo.net

Durchsuchen Sie Inhalte nach Kurzwahlen und rufen Sie Parameter ab

Im Inhalt kann ich mehrere Shortcodes wie [book id="1"] [book id="14" page="243"] haben

Gibt es eine Hilfemethode, mit der ich den Inhalt nach diesem Shortcode durchsuchen und dessen Parameter abrufen kann? Ich muss IDs abrufen, damit ich WP_Query aufrufen und die Titel der benutzerdefinierten Beitragstypen am Ende anhängen kann.

function filter_books( $content ) {

// get all shortcodes IDs and other parameters if they exists
...

return $content;
}
add_filter( 'the_content', 'filter_books', 15 );

Ich habe versucht, folgenden Code zu verwenden, aber var_dump ($ matches) ist leer, und wenn es funktionieren würde, bin ich nicht sicher, wie ich Parameter erhalten würde ( https://stackoverflow.com/questions/23205537/wordpress-shortcode-filtering-the- Inhalt-ändert-alle-Beiträge-in-einer-Liste )

  $shortcode = 'book';
  preg_match('/\['.$shortcode.'\]/s', $content, $matches);
1
Marko

Das funktioniert für mich

  $shortcode = 'book';
  $pattern = get_shortcode_regex();

  // if shortcode 'book' exists
  if ( preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches )
    && array_key_exists( 2, $matches )
    && in_array( $shortcode, $matches[2] ) )  {
   $shortcode_atts = array_keys($matches[2], $shortcode);

 // if shortcode has attributes
 if (!empty($shortcode_atts)) {
  foreach($shortcode_atts as $att) {
    preg_match('/id="(\d+)"/', $matches[3][$att], $book_id);

    // fill the id into main array
    $book_ids[] = $book_id[1];
  }
}
...
0
Marko

es gibt tatsächlich einen viel einfacheren Weg, dies zu erreichen. Wenn der Inhalt von WP analysiert wird, führt es die im Inhalt gefundenen Shortcodes aus. Ab WP 4.7 wird ein neuer Filter do_shortcode_tag ausgelöst, wenn ein Shortcode durch seinen Inhalt ersetzt wird. Dies ist sehr nützlich, um der Shortcode-Ausgabe basierend auf den gefundenen Attributen zusätzlichen Inhalt hinzuzufügen.

add_filter( 'do_shortcode_tag','add_my_script',10,3);
function enqueue_my_script($output, $tag, $attr){
  if('aShortcode' != $tag){ //make sure it is the right shortcode
    return $output;
  }
  if(!isset($attr['id'])){ //you can even check for specific attributes
    return $output;
  }
  $output.='<script> ... </script>';
  return $output;
}

wenn Sie alternativ etwas in die Fußzeile Ihrer Seite einfügen möchten, können Sie die Aktion wp_footer innerhalb der obigen Funktion entweder als anonyme Funktion oder als Auslöser einer anderen Funktion in Ihrer Datei verwenden.

0
Aurovrata