WP_GET_ATTACH_IMAGE_src在主域上返回图像,在子域上返回FALSE

时间:2014-07-02 作者:rkeet

我在开发中安装了一个多站点,其中子域和主站点都使用完全相同的页面模板来显示数据。然而,当我尝试获取概要文件图像(在wp\\u usermeta中添加ID)时,我得到false 但实际图像数据返回到主域。

我发现这可能是一个永久性的问题,但两者都有相同的结构。只是为了确保我更改、保存、更改回、保存了它们。还认为这“可能”是由于输入了string, 所以把身份证投给int 也是为了安全。

有人知道这可能是什么原因吗?

/* Code */
if( isset( $user[ \'meta\' ][ \'prof-pic\' ] )){
    $logo = wp_get_attachment_image_src( $user[ \'meta\' ][ \'prof-pic\' ][ 0 ], \'pic\' );
    echo \'<pre>\';
    var_dump($user[ \'meta\' ][ \'prof-pic\' ][ 0 ]);
    var_dump($logo);
    var_dump(wp_get_attachment_image_src( (int)$user[ \'meta\' ][ \'prof-pic\' ][ 0 ], \'pic\' ));
    echo \'</pre>\';
}

/* Results Subdomain */
string \'94\' (length=2)
boolean false
boolean false

/* Results Main site */
string \'94\' (length=2)
array (size=4)
  0 => string \'http://site/wp-content/uploads/2014/06/Viper-160x100.jpg\' (length=90)
  1 => int 160
  2 => int 100
  3 => boolean true
array (size=4)
  0 => string \'http://site/wp-content/uploads/2014/06/Viper-160x100.jpg\' (length=90)
  1 => int 160
  2 => int 100
  3 => boolean true

2 个回复
最合适的回答,由SO网友:rkeet 整理而成

根据@Rarst的回答,我创建了以下解决方法。

附加字段created_on 应在创建时添加到用户的元数据。这是为了识别创建用户的子域以及配置文件映像可能驻留的位置。因此,请将其添加到您的代码中;)

将此函数放置在一个文件中,从中可以获取用户数据或functions.php 你的主题。

/**
 * Gets the profile image of a customer or regular user (editor/participant)
 * @param $user_id      - id of the user to get the image for
 * @param $image_name   - name of the image-size to return
 * @return array|bool   - returns image source data, or false
 */
function getUserProfileImageSrc( $user_id, $image_name ){
    $profile_image_id = get_user_meta( $user_id, \'prof-pic\', true );   //image of profile picture id
    $created_on = get_user_meta( $user_id, \'created_on\', true );   //id of blog where the user was created
    $created_here = ($created_on == get_current_blog_id() ) ? true : false;   //check if the user was created on the current site
    $image_id = $profile_image_id ? $profile_image_id : false;  //check if $profile_image_id exists, otherwise false
    if( $created_here ){
        return wp_get_attachment_image_src( $image_id, $image_name );   //Image created on current site, get & return image
    } elseif( !$created_here ){
        $current_blog = get_current_blog_id();  //get current blog id
        switch_to_blog( $created_on );  //switch to blog to query correct tables
        $img = wp_get_attachment_image_src( $image_id, $image_name );  //get image
        switch_to_blog( $current_blog );   //switch back to current blog
        return $img;
    }
    return false;             //something didn\'t work, return false
}
Addition: 一块地,created_on, 需要使用创建用户的博客的id进行添加。像这样:

//creating user
//lots of fancyness
update_user_meta( $new_user_id, \'created_on\', get_current_blog_id() );
//finish creating user
所以。希望这能在将来帮助别人。再次感谢@Rarst指出,图像以WP帖子类型上传,因此将其绑定到博客/子域,而不是ID!

SO网友:Rarst

wp_get_attachment_image_src() 获取附件“post type”的ID(加引号,因为它是本机WP post类型,所以与CPT不完全相同)。

现在,虽然用户在多站点中共享,但帖子却不是。ID(94) 在主站点中指向特定附件在多站点的任何其他站点中都没有任何意义。

在这一点上,它归结为从不同站点获取数据的麻烦。在用户元数据中存储图像的实际URL可能更容易。

结束

相关推荐

Resize images in batch

我想调整服务器上的图像大小,我的WordPress站点库中有7000多个图像。我想调整服务器本身上所有图像的大小。我知道可以使用“重新生成缩略图”插件,但为此,我将不得不整天打开浏览器窗口,甚至可能在中间某个地方崩溃,这将导致我再次调整所有图像的大小。有谁有更好的主意来做这件事吗?请简要解释答案。