web-dev-qa-db-ja.com

メディアアップロードで画像投稿IDを取得する

私は私のテーマにカスタム投稿タイプを追加するプラグインを開発しています。これは小売ディレクトリであり、投稿の種類は小売リスティングです。

すべてうまくいっています。コンテンツをDBにアップロードしてから、私が開発したカスタマイズされたCSSフレームワークで印刷することができます。しかし、私がアップロードして画像を表示したいとき、それは私が問題を抱えているときです。

画像がアップロードされたときに問題が発生します。 update_post_meta()を使用して、投稿IDに関連付けられている画像のメタ情報を更新し、列 "meta_value"の下のデータベーステーブル "wp_postmeta"に投稿します。また、WPメディアアップロードJQueryコードを使用して画像を選択します。問題が正確にどこにあるのかはわかりませんが、画像が "meta_value"列に入るときの値はNaNであり、本来あるべきID値ではないため、アップロードに問題があることがわかります。

これがアップロードコードです。

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

そしてwpメディアアップローダーコード:

そして最後に、表示コード:

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>

その後にWPメディアアップロードコードが続きます。

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

アクションは、あなたが持っているのと同じように$post_idを送信するので、それは問題ではありません。

var_dump of $_POSTを試して、実際にnull以外の何かを投稿していることを確認しましたか?

また、save_postアクションを使用すると、投稿が保存されるたびに呼び出されるため、おそらくsave_post_{custom_post_type}アクションを使用して、{custom_post_type}を実際のカスタム投稿タイプに置き換える必要があります( 1つです)。

これを試すことができます:

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

wp-config.phpにこれがあることを確認してください:

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

次に、/wp-content/debug.logファイルの出力を確認します

1
sMyles

私は問題はあなたのメタ値を保存する機能にあると思います、global $post;で試してください

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