Wie bekomme ich die Attribute eines functionscodes aus einem Post?

Ich versuche, eine NextGen-Galerie auf meiner Hauptseite (und Kategorieseiten) anzuzeigen, um ein einzelnes Bild aus der Galerie auf der Hauptseite neben dem Text aus dem Post anzuzeigen, der normalerweise angezeigt wird. Ich habe Beispiele von PHP gefunden, die die Bilder aus einer Galerie mit einer Galerie-ID erhalten. In meiner Schleife habe ich einen aktuellen Beitrag. Was ich nicht herausfinden kann ist, wie man bei einem Post die Attribute des [nggallery] short codes bekommt.

Mit anderen Worten, für jeden Beitrag mit einer NextGEN-Galerie benötige ich den ID-Wert aus dem functionscode. Wenn der Beitrag zum Beispiel [nggallery id=50] enthält, [nggallery id=50] ich den Wert 50 .

Wie kann ich diese Informationen von einem Post erhalten?

Ich hatte gehofft, die Lösung im Quellcode des Plugins der nächsten Generation zu finden, aber natürlich registrierte dieser Code einen Short-Code-Handler und ließ WP sie zurückrufen. Es gibt keine Beispiele in ihrem Quellcode, in denen sie einen Beitrag analysieren, der nach ihrem functionscode sucht.

Solutions Collecting From Web of "Wie bekomme ich die Attribute eines functionscodes aus einem Post?"

Ihre Lösung hat mir geholfen, eine Antwort auf mein eigenes Problem zu finden, das Attribut eines bestimmten Shortcodes zu bekommen, aber ich befürchte, dass es ein Problem mit Ihrem Ansatz geben könnte.

Sie verwenden preg_match , um den preg_match zu überprüfen, der nur 1 Übereinstimmung post_content . Wenn Sie einen Post haben, der mehrere Shortcodes enthält, gibt er nur den ersten zurück, der möglicherweise nicht der gesuchte ist.

Stattdessen sollten Sie preg_match_all und dann das regex_matches Array regex_matches , um nach dem benötigten regex_matches zu regex_matches .

Außerdem müssen Sie str_replace nicht verwenden, um die Anführungszeichen aus der Zeichenfolge zu entfernen. WordPress hat eine eingebaute function shortcode_parse_atts die eine Reihe von Parametern (in $regex_matches[3] Fall $regex_matches[3] ) als Argument $regex_matches[3] und ein Array ausgibt. Dies würde Ihnen auch die Verwendung der wp_parse_args function wp_parse_args .

Ich habe eine Lösung gefunden. Nach einigem Suchen fand ich Code , der festlegt, ob ein Beitrag einen bestimmten functionscode enthält.

Dieser Code versucht auch, die Parameter für den functionscode zu analysieren. Was gut ist, weil ich die Galerie ID möchte. Es gab einige Probleme mit dem Code als Beitrag, also habe ich es optimiert. Hier ist Code, der einen kurzen Code in einem Post finden und seine Parameter erhalten kann:

  < ?php // Look for a NextGEN gallery $galleryID; $previewIndex = 1; $regex_pattern = get_shortcode_regex(); preg_match ('/'.$regex_pattern.'/s', $post->post_content, $regex_matches); if ($regex_matches[2] == 'nggallery') : // Found a NextGEN gallery find out what ID // Turn the attributes into a URL parm string $attribureStr = str_replace (" ", "&", trim ($regex_matches[3])); $attribureStr = str_replace ('"', '', $attribureStr); // Parse the attributes $defaults = array ( 'preview' => '1', ); $attributes = wp_parse_args ($attribureStr, $defaults); if (isset ($attributes["id"])) : $galleryID = $attributes["id"]; endif; if (isset($attributes["preview"])) : $previewIndex = $attributes["preview"]; endif; endif; ?> 

Was optimiert werden musste, war die Handhabung der Parameter. Verwenden Sie trim anstelle eines geheimen wp_parse_args und wechseln Sie zu wp_parse_args , um die Parameter des wp_parse_args korrekt zu behandeln. Sobald der obige Code in einer WP-Schleife $galleryID wird, enthält $galleryID die NextGEN-Gallerie-ID und previewIndex wird auf den Vorschau-Index gesetzt oder 1, wenn kein previewIndex Attribut vorhanden war.

previewIndex ist ein Attribut, das ich “hinzugefügt” habe, um anzuzeigen, welches Miniaturbild für die Vorschau der Galerie verwendet werden soll. NextGEN ignoriert es und die Galerien rendern als normal, aber jetzt kann ich es für mein Theme verwenden, um ein bestimmtes Icon im Vorschau-Eintrag anzuzeigen.

Hier ist der Code aus meiner loop-index.php und loop-category.php , der die Erstellung der Galerievorschau behandelt:

  < ?php /* Enhance the content preview with an image from the NextGEN gallery */ ?> < ?php global $nggdb; $gallery = $nggdb->get_gallery ($galleryID, 'sortorder', 'ASC', true, 0, 0); $image = $gallery[$previewIndex]; $total_images = count ($gallery); ?> < ?php if (isset($image) && isset($image->thumbURL)) : ?> < ?php /* Show the thumbnail */ ?>    < ?php endif; ?> < ?php /* Show the text excerpt */ ?> < ?php the_excerpt(); ?> < ?php /* Show the statement of number of images contained */ ?> < ?php printf( _n( 'This gallery contains %2$s photo.', 'This gallery contains %2$s photos.', $total_images, 'twentyten' ), 'href="' . get_permalink() . '" title="' . sprintf( esc_attr__( 'Permalink to %s', 'twentyten' ), the_title_attribute( 'echo=0' ) ) . '" rel="bookmark"', number_format_i18n( $total_images )); ?>  < ?php endif; ?> 

Dabei werden Informationen aus einer anderen Antwort bezüglich des Zugriffs auf NextGEN-Galerieobjekte verwendet, um das Thumbnail und die Anzahl der Bilder in der Galerie zu erhalten.