it-swarm.com.de

Wie erstelle ich eine Anhang-ID mit Ajax Submit? Keine Seitenaktualisierung

Ich weiß, dass ich das schon einmal gemacht habe, mit einem Frontend-Post-Formular, das Ajax verwendet hat, um die Formulardaten an ein PHP-Skript zu senden, das wp_insert_post () verwendet und dann nach einer Erfolgsmeldung zu diesem Post umgeleitet hat, aber ich kann nicht herausfinden, wie um es mit Anhängen zu tun.

Was ich versuche, ist ein bisschen schwer zu erklären. Lass es mich versuchen. Ich habe eine Metabox, mit der Sie Anhänge hinzufügen/entfernen können, indem Sie jquery verwenden, um weitere Eingaben hinzuzufügen, oder um sie zu entfernen und diese Datei dann von Ihrer Site zu löschen. Das Zeug funktioniert. Was ich tun möchte, ist, wenn Sie einen neuen Satz von Eingaben hinzufügen, die Informationen eingeben, die hochzuladende Bilddatei auswählen und dann für diesen Satz von Eingaben auf Speichern klicken (jeder Satz hat eine eigene Schaltfläche zum Speichern), über die die Schaltfläche zum Speichern verfügt ein Ajax-Skript, das die Daten an post.php sendet oder was auch immer passiert, wenn Sie auf die Schaltfläche Veröffentlichen klicken.

Wenn ich ein paar Felder für Anhänge ausfülle und auf Veröffentlichen klicke, wird meine Aktion für 'save_post' verwendet, um diese Daten zu speichern. Ich möchte eine Funktion erstellen, die admin-ajax.php und einen benutzerdefinierten Hook verwendet. Derzeit habe ich eine Löschfunktion, die admin-ajax.php verwendet, um die Anhangdatei aus dem Beitrag und der Medienbibliothek zu löschen.

Wie kann ich eine Funktion erstellen, die die Datei hinzufügt? Ich bin so verwirrt, lol.

1
jaredwilli

Hier ist meine Lösung zum Erstellen einer Anhangs-ID mit einem temporären Titel und dem post_parent, an das er angehängt ist.

Mein jQuery-Pseudo-Code, ohne das unnötige Zeug:

    jQuery('.addImage').live('click', function() {
        jQuery.ajax({
            type: 'post',
            url: ajaxurl,
            data: {
                action: 'save_attachment',
                _ajax_nonce: jQuery('#nonce_add').val(),
                post_parent: jQuery('#post_ID').val(),
                attach_title: 'Attachment ' + size
            },
            success: function( res ) {
                var attID = res.replace(/0$/i, '');
                alert('Success: ' + attID);
            }
        });             
        size++;
        return false;
    });

Meine admin-ajax.php-Funktion und mein benutzerdefinierter Hook:

function save_attachment() {
    if ( $_POST['action'] == 'save_attachment' ) {

        $post_title = $_POST['attach_title'];
        $post_parent = $_POST['post_parent'];

        $attach = array(
            'post_title'    => $post_title,
            'post_parent'   => $post_parent,
            'post_type'     => 'attachment',
            'guid'          => '',
            'post_mime_type'=> 'image'
        );
        $attachID = wp_insert_attachment( $attach, false );
        if( $attachID ) {
            print_r( $attachID );
        }
    }
}
add_action( 'wp_ajax_save_attachment', 'save_attachment' );

Sehen Sie, was ich hier habe, es gibt einen Link mit der Klasse .addImage, klicken Sie darauf, und die Funktion ajax/php save_attachment () gibt die ID zurück, die ich in dem Codeabschnitt verwende, den ich meiner Metabox voranstelle (eine Gruppe von Eingaben für neue Datei) und die zurückgegebene Anhang-ID werden als Wert im ausgeblendeten Eingabefeld in diesem Codeabschnitt verwendet. Es gibt auch eine Schaltfläche zum Speichern in diesem Block.

Angesichts dieser ID kann ich nun meine bereits vollständige und funktionierende Funktion zum Speichern (oder Aktualisieren) der Anhänge mit admin-ajax.php verwenden, um die eingegebenen Daten und die jeweils ausgewählte Datei zu speichern. Mit der Schaltfläche zum Entfernen können Sie auch die ID verwenden, um leere Anhänge zu entfernen, wenn Sie sie nicht verwenden.

Dies wird bald ein krankes Arsch-Plugin sein, sobald ich es als aufgebockte benutzerdefinierte Metabox zum Laufen bekomme.

0
jaredwilli