wake-up-neo.net

Wie bekomme ich Galeriebilder?

Ich habe einige Bilder in WordPress-Posts hochgeladen (z. B. Post # 1 und Post # 2). Jetzt habe ich einen neuen Beitrag erstellt (z. B. Beitrag Nr. 3) und in diesen Beitrag habe ich die WordPress 3.5-Galerie eingefügt. Ich habe in Beitrag Nr. 3 kein Bild hochgeladen, sondern die Bilder aus Beitrag Nr. 1 verwendet und poste # 2. Jetzt in dem Beitrag # 3 möchte ich die Links zu den Bildern bekommen, aber ich kann scheinbar nicht bekommen. Ich benutze den folgenden Code:

$attachments = get_children( array('post_parent' => get_the_ID(), 'post_type' => 'attachment', 'post_mime_type' =>'image') );
    foreach ( $attachments as $attachment_id => $attachment ) {
            echo wp_get_attachment_image( $attachment_id, 'medium' );
   }

Es wird nur das Bild angezeigt, wenn ich es in den Beitrag hochlade, aber es wird nicht angezeigt, wenn ich es aus den anderen Beiträgen hinzufüge. Wie kann ich also die Links zu den Bildern erhalten, die in der Galerie hinzugefügt, aber nicht hochgeladen wurden?.

Danke für jede Hilfe.

4
jay

Ich hatte das gleiche Problem - wie kann ich alle Bilder aus einem Beitrag anzeigen, der eine Galerie enthält, in der einige der Bilder nicht an den Beitrag angehängt sind oder an verschiedene Beiträge angehängt sind?

Mit der neuen Medienschnittstelle in WP3.5 können Sie Bilder in der Medienbibliothek zu einer Galerie hinzufügen, unabhängig davon, ob sie "angehängt" sind oder nicht. Wie Sie festgestellt haben, gibt die Funktion "get_children" nur Bilder zurück, die an den Beitrag angehängt sind. Der Trick, den ich verwendet habe, besteht darin, die IDs aus dem Shortcode [gallery] selbst zu ermitteln und nicht aus der Tatsache, dass es sich um Anhänge handelt. Der Shortcode enthält alle Bild-IDs, unabhängig davon, ob sie an den Beitrag angehängt sind oder nicht. Z.B. [gallery ids = "410,411,412,413,414,415"]. Offensichtlich kann WordPress dies analysieren, um alle Bilder abzurufen und sie in einem Galerieformat anzuzeigen, indem die Funktion "gallery_shortcode" verwendet wird, die im Kern von WordPress enthalten ist (in includes/media.php). Um die IDs aller Bilder im Funktionscode [gallery] zu erhalten, habe ich in meiner functions.php-Datei eine neue Funktion erstellt:

function grab_ids_from_gallery() {

global $post;
$attachment_ids = array();
$pattern = get_shortcode_regex();
$ids = array();

if (preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches ) ) {   //finds the     "gallery" shortcode and puts the image ids in an associative array at $matches[3]
$count=count($matches[3]);      //in case there is more than one gallery in the post.
for ($i = 0; $i < $count; $i++){
    $atts = shortcode_parse_atts( $matches[3][$i] );
    if ( isset( $atts['ids'] ) ){
    $attachment_ids = explode( ',', $atts['ids'] );
    $ids = array_merge($ids, $attachment_ids);
    }
}
}
  return $ids;

 }
add_action( 'wp', 'grab_ids_from_gallery' );

Verwenden Sie jetzt einfach die Funktion "grab_ids_from_gallery ()", um alle IDs als Array in Ihrer Vorlage zurückzugeben.

Ich bin mir sicher, dass es einen eleganteren Weg gibt - aber das funktioniert für mich. Die Basis für diesen Code war:

http://core.trac.wordpress.org/ticket/22960

hier wird dieses Problem besprochen.

5
steveO

Ich muss zugeben, dass ich nicht die Zeit hatte, mit den neuen Mediengalerien von 3.5 und dergleichen zu spielen, sondern nur mit dem Code zu arbeiten, ohne die Gallery-Funktionalität von WP zu beeinträchtigen ...

Der von Ihnen bereitgestellte Code verwendet get_children(), wobei die Abfragevariable post_parent auf get_the_ID() gesetzt ist (die ID des Post-Objekts, das gerade in der Inhaltsschleife verarbeitet wird). Aus diesem Grund kann der Aufruf von get_children() nur Anhänge zum aktuellen Beitrag abfragen, und keine anderen .

In der Terminologie Ihres Beispiels kann Ihr Code, wenn er während der Verarbeitung von Post # 3 im Kontext der Schleife ausgeführt wird, die an Post # 1 und Post # 2, da speziell nach den Anhängen gefragt wird, die an Post # 3 angehängt sind.

Leider unterstützt Wordpress nicht die Übergabe mehrerer Werte an die post_parent-Abfragevariable. Um also die Anhänge von den anderen Posts auf die von Ihnen gewünschte Weise abzurufen, müssen Sie die Post-IDs der Anhänge abrufen. Enthält Posts (Post # 1 und Post # 2) und ruft jeweils get_children() auf, wobei der Wert post_parent von "get_the_ID()" durch die entsprechende ID ersetzt wird.

Eine effizientere (wenn auch theoretisch komplexere) Lösung ist unter Umständen möglich, wenn Sie das WP_Query - Objekt geschickt einsetzen. Ich bin jedoch der Meinung, dass Sie für die gesuchte Lösung (oder vermutlich für die gesuchte) nie eine Frage gestellt haben. )) würde etwas in der Richtung von

$attachmentParentIds = getAttachmentParentIds( get_the_ID() );
foreach( $attachmentParentIds as $attParentId ) {
    $attachments = get_children( array('post_parent' => $attParentId, 'post_type' => 'attachment', 'post_mime_type' =>'image') );
    foreach ( $attachments as $attachment_id => $attachment ) {
        echo wp_get_attachment_image( $attachment_id, 'medium' );
    }
}

die verwendet eine Funktion wie

//Returns an array of post IDs containing attachments that should be displayed
//on the post indicated by the passed post ID.
function getAttachmentParentIds( $intPostId ) {
    $ids = array();

    //Figure out which posts contain attachments that need to be displayed for $intPostID

    //...

    return $ids; //return an array of IDs
}

als Platzhalter für die Logik, die festlegt, welche Posts Anhänge enthalten, die für die übergebene Post-ID angezeigt werden müssen. Ich bin nicht sicher, inwieweit Ihre Implementierung und Ihre Bewerbung vorliegen, und als solche weiß ich nicht, was die Besonderheiten dieser Logik in Bezug auf Ihr Projekt bedeuten könnten.

0
bosco

Die echte Lösung wäre die Erstellung einer neuen "echten" Objekt "Galerie" mit einer eigenen ID.

Eine Galerie ist nicht mehr als ein Array von Bild-IDs, aber es wäre einfacher zu verwalten:

  • Sie können es direkt im Medien-Manager erstellen, so wie Sie die neuen "Galerien" jetzt in WP 3.5.x erstellen. Anstatt einen Shortcode wie diesen zu generieren: [gallery ids = "xx, yy, zz "] es könnte einfach eine neue" Galerie "erstellen mit einer eigenen ID und sie so nennen: [gallery galley_id =" 123 "]

  • Sie können Ihre "echten Galerien" -Objekte in einem neuen Bereich "Galerien" unter Medien verwalten

  • Sie hätten eine Reihe von Funktionen, um ein solches Objekt zu verwalten. Auf diese Weise würde das Problem des OP gelöst, indem lediglich die gallery_id zur Verwendung in der attachment.php-Vorlage (oder einer neuen gallery.php-Vorlage, die ebenfalls implementiert werden könnte) mit der entsprechenden Funktion übergeben wird.

  • Sie können Bilder, die an verschiedene Posts angehängt sind, in einem Galerieobjekt mischen, ohne sich um den ursprünglichen Post kümmern zu müssen.

  • Sie können einem Post im Handumdrehen mehrere Galerien hinzufügen.

Wenn Sie darüber nachdenken, sind dies die NextGen-Galerien auf den Punkt gebracht. Kein Wunder, dass die Leute dieses Plugin oft benutzen. Leider denke ich nicht, dass solch ein wichtiges Feature einem Plugin vorgezogen werden sollte, besonders einem ziemlich aufgeblähten und schweren wie Nextgen, das eine Menge überflüssiger Features enthält.

In diesem Sinne ist die Logik des New Media Managers meiner Meinung nach ein wenig fehlerhaft. Es deutet darauf hin, dass Sie eine neue Entität namens "Galerie" "erstellen", während diese lediglich eine Reihe von Bild-IDs für Sie zusammenführt.

Ich verstehe, dass Sie den Fehler nicht sehen, wenn Sie das Carousel-Display von Jetpack verwenden, da Sie dadurch nicht von der aktuellen Seite entfernt werden und das Bild nicht an die von Ihnen erstellte Galerie gebunden werden muss ".

Trotzdem denke ich, dass es eine gefährliche Lücke zwischen der Benutzeroberfläche des neuen Medienmanagers und dem, was es tatsächlich tut, eine Galerie zu zeigen.

0
CamilloMiller