我正在开发一个插件,为我的主题添加一个自定义帖子类型。这是一个零售目录,帖子类型是零售列表。
一切正常。我可以将内容上传到DB,然后在我开发的定制CSS框架中打印。然而,当我想上传和显示图像时,我就遇到了问题。
上载图像时出现问题。我使用update\\u post\\u meta()来更新与post ID相关的图像的元信息,并将其发布到“meta\\u value”列下的数据库表“wp\\u postmeta”。我还使用WP media upload JQuery代码来选择图像。我不确定问题到底出在哪里,但我知道这与上载有关,因为当图像进入“meta\\u 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>
SO网友:sMyles
该操作发送$post_id
就像你一样,所以这不是问题所在。
你有没有试过var_dump
属于$_POST
确保它实际上发布的不是null?
此外,使用save_post
每次保存帖子时都会调用操作,因此您可能需要使用save_post_{custom_post_type}
操作,更换{custom_post_type}
使用您的实际自定义帖子类型(如果是一种)。
您可以尝试以下操作:
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
输出文件