在媒体上传中获取图片帖子ID

时间:2013-09-04 作者:Rod

我正在开发一个插件,为我的主题添加一个自定义帖子类型。这是一个零售目录,帖子类型是零售列表。

一切正常。我可以将内容上传到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 ?>&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>

2 个回复
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 输出文件

SO网友:Anjum

我认为问题出在save meta values函数中,请尝试global $post;

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

结束

相关推荐

将WordPress附件导入wp-Content/Uploads/中的自定义目录

我希望有人能阐明我试图解决的这个问题,即使只是简单地改变我的思维过程,告诉我如何解决这个问题。我正在将一个基于CakePHP的定制CMS web应用程序导入WordPress,方法是遍历数据库,进行大量SQL查询,构建数组,最后输出必要的XML文件,以便使用WordPress导入工具导入。目前我已经很好地导入了类别、标签和帖子/页面,没有问题,但问题似乎出在图像上。基于CakePHP的CMS中当前的图像格式是images/year/month/day/post_id/image_name.ext据我所知,