私は私のテーマにカスタム投稿タイプを追加するプラグインを開発しています。これは小売ディレクトリであり、投稿の種類は小売リスティングです。
すべてうまくいっています。コンテンツを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 ?>&type=image&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>
アクションは、あなたが持っているのと同じように$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
ファイルの出力を確認します
私は問題はあなたのメタ値を保存する機能にあると思います、global $post;
で試してください
function process_image_meta() {
global $post, $post_id;
update_post_meta( $post_id, '_image_id', $_POST['upload_image_id'] );
}