web-dev-qa-db-fra.com

Obtenir une image de publication dans le téléchargement multimédia

Je développe un plugin qui ajoute un type de message personnalisé à mon thème. C'est un répertoire de détail et le type de message est une liste de détail.

Tout fonctionne bien. Je peux télécharger du contenu dans la base de données, puis imprimer dans un framework CSS personnalisé que j'ai développé. Cependant, quand je veux télécharger et afficher une image, c'est quand j'ai des problèmes.

Le problème se produit lorsque l'image est téléchargée. J'utilise update_post_meta () pour mettre à jour la méta-information de l'image qui la lie à l'ID de publication et la poster dans la table de la base de données "wp_postmeta" dans la colonne "meta_value". J'utilise également le code JQuery de téléchargement de média WP pour sélectionner l'image. Je ne sais pas exactement où se situe le problème, mais je sais que c'est avec le téléchargement car lorsque l'image est insérée dans la colonne "meta_value", sa valeur est NaN et non la valeur d'ID qu'elle devrait être.

Voici le code de téléchargement:

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'] );
    }

Et le code de téléchargement de média wp:

Et enfin, le code d'affichage:

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>

Suivi du WP code de téléchargement du support:

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

L'action envoie le $post_id comme vous l'avez fait, alors ce n'est pas le problème.

Avez-vous essayé un var_dump sur $_POST pour vous assurer qu'il affiche réellement autre chose que null?

En outre, l’utilisation de l’action save_post sera appelée chaque fois qu’une publication est enregistrée. Vous devrez donc probablement utiliser l’action save_post_{custom_post_type}, en remplaçant {custom_post_type} par votre type de publication personnalisée (le cas échéant).

Vous pouvez essayer ceci:

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);
    }

Assurez-vous de l'avoir dans votre wp-config.php:

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

Ensuite, vérifiez le fichier /wp-content/debug.log pour la sortie

1
sMyles

je pense que le problème est dans votre fonction de sauvegarde des méta-valeurs, essayez avec global $post;

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