Erstellen einer Metabox zum Hochladen mehrerer Bilder


8

Ist es möglich, eine Meta-Box zu erstellen, die mehrere Bilder an einen Beitrag anfügt?


Unter emenia.es/plugin-subir-imagenes-campo-personalizado-wordpress finden Sie ein vollständiges Tutorial zum Hochladen mehrerer Bilder, in dem Meta-Boxen zu einem Beitrag, einer Seite oder einem benutzerdefinierten Beitragstyp hinzugefügt werden. Es ist auf Spanisch, aber ich könnte es ohne Probleme zum Laufen bringen .

Antworten:


7

Das hängt ganz davon ab, was Sie unter "Anhängen" verstehen.

Jeder WordPress-Beitrag kann bereits mehrere Medienanhänge enthalten - Fotos, Dokumente usw. Sie laden diese mit dem integrierten Uploader hoch und alle werden als "angehängt" an diese bestimmte Beitrags-ID gekennzeichnet.

Sie können später programmatisch an anderer Stelle darauf verweisen. Der folgende Code listet beispielsweise alle Anhänge für einen bestimmten Beitrag auf (Code von Snipplr ) :

$args = array(
    'post_type' => 'attachment',
    'numberposts' => null,
    'post_status' => null,
    'post_parent' => $post->ID
);
$attachments = get_posts($args);
if ($attachments) {
    foreach ($attachments as $attachment) {
        echo apply_filters('the_title', $attachment->post_title);
        the_attachment_link($attachment->ID, false);
    }
}

Auf all diese Funktionen kann über die Standardschaltfläche "Medien hinzufügen" ganz rechts neben "Hochladen / Einfügen" auf dem neuen Post-Bildschirm zugegriffen werden. Nachdem Sie ein Bild hinzugefügt haben, können Sie erneut auf "Dateien auswählen" klicken und ein zweites Bild hochladen. Dann ein dritter. Dann ein vierter. So viele wie du willst.

Jedes dieser Bilder wird an den Beitrag "angehängt" ... auch wenn sie nicht in den Inhalt eingefügt werden.


Aus irgendeinem seltsamen Grund kann ich diesen Code nur dazu bringen, den ersten Anhang in der Vorlage auszugeben, obwohl der Rest angehängt ist. Irgendwelche Ideen? Hier ist der Code ... dl.dropbox.com/u/497583/code/wp-attactments.txt
agileapricot

Sie müssen verschiedene Variablen verwenden. Sie verwenden beide $postund $argsin mindestens zwei verschiedenen Kontexten, was es sehr schwierig macht, genau herauszufinden, was Sie gleichzeitig versuchen. Aber ich habe den Code, den ich oben gepostet habe, getestet und er funktioniert ...
EAMann

6

Hier ist ein vollständiges Tutorial mit Quelldateien, die genau das tun, was Sie wollen.
Sie können mehrere Bilder hochladen, indem Sie das Eingabefeld klonen. Außerdem können Sie eine Vorschau anzeigen, Bilder mit Ajax löschen, mehrere Metaboxen zu mehreren / verschiedenen Beitragstypen hinzufügen und vieles mehr.

http://www.deluxeblogtips.com/2010/05/howto-meta-box-wordpress.html


Ich unterstütze das. Es wirkt wie ein Zauber.
Manny Fleurmond

Während der von Ihnen bereitgestellte Link jetzt tot ist, hat sich das Referenzprojekt in ein vollwertiges, entwicklerfreundliches Plugin / Bibliothek verwandelt. Siehe: wordpress.org/plugins/meta-box und github.com/wpmetabox ... Sieht nach einem großartigen Produkt aus.
Kerry Randolph

2

Ich würde auch empfehlen, http://www.wpalchemy.com zu besuchen . WPAlchemy ist eine Kick-Ass- "Klasse" (in der Nähe eines Plugins), mit der Sie Ihrer Site auf einfache Weise benutzerdefinierte Meta-Boxen hinzufügen können. Ich benutze es ausgiebig und war beeindruckt von der Benutzerfreundlichkeit und dem Engagement der Entwickler und der aufstrebenden Community.


0

Ja, das ist durchaus möglich. Siehe eine Antwort, die ich über Metaboxen erhalten habe. Grundsätzlich möchten Sie nur einen Hook für save_postdas Nonce-Feld hinzufügen und es überprüfen.

function my_save_post_callback( $post_id, $post )
{
    if ( empty($_POST) || !isset($_POST['my_custom_metabox']) || !wp_verify_nonce( $_POST['my_custom_metabox'], plugin_basename( __FILE__ ) ) )
    {
        return $post->ID;
    }

    // Handle the upload here

}
add_action( 'save_post', 'my_save_post_callback', 1, 2);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.