it-swarm.com.de

Wie erhalte ich die Attribute eines Funktionscodes aus einem Beitrag?

Ich versuche, eine Vorschau einer NextGen-Galerie auf meiner Hauptseite (und Kategorieseiten) anzuzeigen, um ein einzelnes Bild aus der Galerie auf der Hauptseite neben dem Text aus dem Beitrag anzuzeigen, der normalerweise angezeigt wird. Ich habe Beispiele für PHP gefunden, bei denen die Bilder aus einer Galerie mit einer Galerie-ID abgerufen werden. In meiner Schleife habe ich einen aktuellen Beitrag. Was ich nicht herausfinden kann, ist, wie ich bei einem bestimmten Beitrag die Attribute des Funktionscodes [nggallery] erhalte.

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

Wie kann ich diese Informationen aus einem Beitrag erhalten?

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

2
Ian Lelsie

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

Dieser Code hat auch einige Versuche, die Parameter auf den Funktionscode zu analysieren. Welches ist gut, weil ich die Galerie-ID will. Es gab einige Probleme mit dem Code, so dass ich ihn optimiert habe. Hier ist Code, der einen kurzen Code in einem Beitrag findet und dessen Parameter abruft:

        <?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 verbessert werden musste, war die Handhabung der Parameter. Verwenden Sie trim anstelle einer geheimen Charter und wechseln Sie zu wp_parse_args, um die Parameter für den Funktionscode korrekt zu handhaben. Sobald der obige Code in einer WP -Schleife ausgeführt wurde, enthält $galleryID die NextGEN-Galerie-ID und previewIndex wird auf den Vorschauindex oder 1 gesetzt, wenn kein previewIndex-Attribut vorhanden war.

previewIndex ist ein Attribut, das ich "hinzugefügt" habe, um anzugeben, welches Vorschaubild für die Galerie-Vorschau verwendet werden soll. NextGEN ignoriert es und die Galerien werden normal gerendert. Jetzt kann ich es für mein Design verwenden, um ein bestimmtes Symbol im Vorschaueintrag anzuzeigen.

Hier ist der Code aus meinem loop-index.php und loop-category.php, der für die Erstellung der Galerie-Vorschau zuständig ist:

            <?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 */ ?>
                <a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'twentyten' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark">
                    <img class="entry-preview-image" src="<?php echo $image->thumbURL ?>" align="left" />
                </a>
            <?php endif; ?>

            <?php /* Show the text excerpt */ ?>
            <?php the_excerpt(); ?>

            <?php /* Show the statement of number of images contained */ ?>
            <em><?php printf( _n( 'This gallery contains <a %1$s>%2$s photo</a>.', 'This gallery contains <a %1$s>%2$s photos</a>.', $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 )); ?>
            </em>
        <?php endif; ?>

Hierbei werden Informationen aus einer anderen Antwort zum Zugriff auf NextGEN gallery Objekte verwendet, um die Miniaturansicht und die Anzahl der Bilder in der Galerie abzurufen.

1
Ian Lelsie

Ihre Lösung hat mir geholfen, eine Antwort auf mein eigenes Problem zu finden, das Attribut eines bestimmten Shortcodes zu erhalten, aber ich befürchte, dass es ein Problem mit Ihrer Vorgehensweise gibt.

Sie verwenden preg_match, um den post_content zu überprüfen, der nur eine Übereinstimmung zurückgibt. Wenn Sie einen Beitrag mit mehreren Kurzwahlen haben, wird nur der erste zurückgegeben, der möglicherweise nicht der gesuchte ist.

Verwenden Sie stattdessen preg_match_all und durchlaufen Sie dann das regex_matches-Array, um nach dem benötigten Shortcode zu suchen.

Außerdem müssen Sie str_replace nicht verwenden, um die Anführungszeichen aus der Zeichenfolge zu entfernen. Wordpress verfügt über eine integrierte Funktion shortcode_parse_atts, die eine Zeichenfolge von Parametern (in Ihrem Fall $regex_matches[3]) als Argument verwendet und ein Array ausgibt. Dies erspart Ihnen auch die Verwendung der Funktion wp_parse_args.

2
Andrei G.