How do I get attachment_id?

时间:2014-10-31 作者:Wordpressor

这很琐碎,但我真的找不到答案,我看到了一些提示,如在数据库中搜索等,但这太疯狂了。

基本上,我有一个带有上载按钮的元数据库,允许您从媒体库上载或拾取现有图像,这就是我获取此图像URL的方式:

$my_image = get_post_meta($post->ID, \'_my_image_metabox\', true);
当然,我确实希望显示此图像的确切大小,因此我需要使用:

wp_get_attachment_image_src($attachment_id, \'desired-size\');
问题是我如何attachment_id 属于_my_image_metabox? 我一直在到处搜索,没有明智的答案,怎么会呢wp_get_attachment_image_src() 如果没有一条线路$attachment_id 在法典中,无论什么?:)

[updated]

var_dump($my_image) 返回值:

array(1) { [0]=> string(86) "http://localhost/theme/wp-content/uploads/2014/10/my_image.jpg" }
保存数据非常复杂,因为我使用自己的metabox生成类,如下所示:https://github.com/nyordanov/SmartMetaBox/blob/master/SmartMetaBox.php

那么,如何将正确的attachment\\u id注入到我的\\u映像中?我想补充的是,我有多个(10)字段,像这样的一个,希望每个字段都有单独的、唯一的attachment\\u id。

6 个回复
SO网友:Ego Ipse

好的,所有这些hipercomplex函数都可以简化为一个简单的命令:attachment_url_to_postid

您只需解析图像url即可检索附件id:

<?php

   $attachment_id = attachment_url_to_postid( $image_url );
   echo $attachment_id;

?>
这就是你所需要的。

SO网友:Tomás Ramírez

我在使用CMB插件时遇到了同样的问题,我解决了在functions.php 要使用图像url获取图像ID,请执行以下操作:

功能。php

function cmb_get_image_id($image_src) {
    global $wpdb;
    $image = $wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid=\'%s\';", $image_src )); 
    return $image[0]; //return the image ID
}
主题中:
$my_image = get_post_meta($post->ID, \'_my_image_metabox\', false);
$attachment_id = cmb_get_image_id($my_image);
wp_get_attachment_image_src($attachment_id, \'desired-size\');

SO网友:Abhik

在这种情况下,我会将id与URL一起保存在一个隐藏的输入中。

function meta_image_upload() {
    global $post;
    $my_image = get_post_meta($post->ID, \'_my_image_metabox\', true);
    $my_image_id = get_post_meta($post->ID, \'_my_image_id_metabox\', true);

    $out = \'<input id="my_image" type="text" name="my_uploaded_image" value="\'. $my_image .\'">\';
    $out .= \'<input id="my_image_id" type="hidden" name="my_uploaded_image_id" value="\'. $my_image_id .\'">\';
    $out .= \'<button id="my_image_upload">Upload Image</button>\';

    echo $out;
}  
在上载处理程序脚本上:

attachment = custom_uploader.state().get(\'selection\').first().toJSON();
    $(\'#my_image\').val(attachment.url);
    $(\'#my_image_id\').val(attachment.id); // Just add this line
然后在其他回调时:

global $post;
$my_image_id = get_post_meta($post->ID, \'_my_image_id_metabox\', true);
wp_get_attachment_image_src($my_image_id, \'desired-size\');
这就是我的解决方案,也许有人会想出更好的解决方案。然而,我发现它比查询数据库来获取关联的附件id更快。

SO网友:Bilal

我来不及回答这个问题,但它会起作用的。

$attachment_id = get_post_thumbnail_id( $post->ID );
$url = wp_get_attachment_image_src($attachment_id, \'desired-size\');

SO网友:Ahir Hemant

您保存的所有帖子元都被附加到类型为attachment的帖子上,因此您可以考虑$post->ID 是附件ID。

SO网友:Ahir Hemant

Try with this:

$attachment_id = $wpdb->get_var( 
    $wpdb->prepare( 
        "SELECT wposts.ID 
            FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta 
            WHERE wposts.ID = wpostmeta.post_id 
            AND wpostmeta.meta_key = \'_wp_attached_file\' 
            AND wpostmeta.meta_value = \'%s\' 
            AND wposts.post_type = \'attachment\'", 
        $url
    ) 
);
结束

相关推荐

在我的定制贴子类型后端添加一个metabox短码“PayPal Accept Payment”

我已经创建了一本带有annotum主题的科学杂志,现在我希望用户在发布文章时付费,但当他们单击publish以使用paypal付费时,我没有编程技能来做到这一点,所以我想在我的自定义帖子类型中创建一个元框:文章中包含一个位于文章帖子类型管理区域的WP Easy paypal Payment Accept小部件。在dashboard admin区域中,我通过以下代码创建了此小部件(带有短代码:Paypal_payment_accept();) : function wpc_dashboard_widget