it-swarm.com.de

Abrufen der ID für Bildbeiträge beim Hochladen von Medien

Ich entwickle ein Plugin, das meinem Thema einen benutzerdefinierten Beitragstyp hinzufügt. Es ist ein Einzelhandelsverzeichnis und der Beitragstyp ist eine Einzelhandelsauflistung.

Alles funktioniert gut. Ich kann Inhalte in die DB hochladen und dann in einem von mir entwickelten benutzerdefinierten CSS-Framework drucken. Wenn ich jedoch ein Bild hochladen und anzeigen möchte, habe ich Probleme.

Das Problem tritt auf, wenn das Bild hochgeladen wird. Ich verwende update_post_meta (), um die Metainformationen des Bildes zu aktualisieren, die mit der Post-ID zusammenhängen, und poste sie in der Datenbanktabelle "wp_postmeta" in der Spalte "meta_value". Ich verwende auch den WP JQuery-Code zum Hochladen von Medien, um das Bild auszuwählen. Ich bin mir nicht sicher, wo genau das Problem liegt, aber ich weiß, dass es sich um den Upload handelt, denn wenn das Bild in die Spalte "meta_value" verschoben wird, hat es den Wert NaN und nicht den ID-Wert, den es haben sollte.

Hier ist der Upload-Code:

add_action( 'save_post', 'process_image_meta', 10, 2 );

function process_image_meta( $post_id, $post ) {
        update_post_meta( $post_id, '_image_id', $_POST['upload_image_id'] );
    }

Und der wp media uploader code:

Und zum Schluss der Anzeigecode:

function display_retail_listing_meta_box($retail_listing) {
    // Retrieve current shop details based on retail lisitng ID

    global $post;

        $image_src = '';
    $image_id = get_post_meta( $post->ID, '_image_id', true);
    $image_src = wp_get_attachment_url( $image_id );
?>

<table>
<tr>
<td style="width: 100%">Image Upload</td>
<td><img id="shop_image" src="<?php echo $image_src; ?>" style="max-width:100%;" />
<input type="text" name="upload_image_id" id="upload_image_id" value="<?php echo $image_id; ?>" />
<a title="<?php esc_attr_e( 'Upload Image' ) ?>" href="#" id="upload-image"><?php _e( 'Upload Image' ) ?></a>
<a title="<?php esc_attr_e( 'Remove Image' ) ?>" href="#" id="remove-image" style="<?php echo ( ! $image_id ? 'display:none;' : '' ); ?>"><?php _e( 'Remove Image' ) ?></a>
</tr>
</table>

Gefolgt von dem WP Media Upload Code:

jQuery(document).ready(function($) {

        // save the send_to_editor handler function
        window.send_to_editor_default = window.send_to_editor;

        $('#upload-image').click(function(){

            // replace the default send_to_editor handler function with our own
            window.send_to_editor = window.attach_image;
            tb_show('', 'media-upload.php?$post_id=<?php echo $post->ID ?>&amp;type=image&amp;TB_iframe=true');

            return false;
        });

        $('#remove-image').click(function() {

            $('#upload_image_id').val('');
            $('img').attr('src', '');
            $(this).hide();

            return false;
        });

        // handler function which is invoked after the user selects an image from the gallery popup.
        // this function displays the image and sets the id so it can be persisted to the post meta
        window.attach_image = function(html) {

            // turn the returned image html into a hidden image element so we can easily pull the relevant attributes we need
            $('body').append('<div id="temp_image">' + html + '</div>');

            var img = $('#temp_image').find('img');

            imgurl   = img.attr('src');
            imgclass = img.attr('class');
            imgid    = parseInt(imgclass.replace(/\D/g, ''), 10);

            $('#upload_image_id').val(imgid);
            $('#remove-image').show();

            $('img#shop_image').attr('src', imgurl);
            try{tb_remove();}catch(e){};
            $('#temp_image').remove();

            // restore the send_to_editor handler function
            window.send_to_editor = window.send_to_editor_default;

        }

    });
    </script>
1
Rod

Die Aktion sendet den $post_id genau wie Sie, das ist also nicht das Problem.

Haben Sie versucht, einen var_dump von $_POST zu verwenden, um sicherzustellen, dass tatsächlich etwas anderes als null veröffentlicht wird?

Außerdem wird die Aktion save_post jedes Mal aufgerufen, wenn ein Beitrag gespeichert wird. Daher müssen Sie wahrscheinlich die Aktion save_post_{custom_post_type} verwenden und {custom_post_type} durch Ihren tatsächlichen benutzerdefinierten Beitragstyp ersetzen (sofern es sich um einen handelt).

Sie könnten dies versuchen:

function process_image_meta( $post_id, $post ) {
        error_log('POSTED: ' . $_POST['upload_image_id']);
        $result = update_post_meta( $post_id, '_image_id', $_POST['upload_image_id'] );
        error_log('Image Meta Added: ' . $result);
    }

Stellen Sie sicher, dass Sie dies in Ihrem wp-config.php haben:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);

Überprüfen Sie dann die /wp-content/debug.log-Datei für die Ausgabe

1
sMyles

ich denke, das Problem liegt in Ihrer Funktion zum Speichern von Metawerten. Versuchen Sie es mit global $post;.

function process_image_meta() {
    global $post, $post_id;
    update_post_meta( $post_id, '_image_id', $_POST['upload_image_id'] );
}
0
Anjum