上传到用户配置文件中自定义域的图像的自定义大小?

时间:2013-03-03 作者:Anagio

我正在使用高级自定义字段,并在用户配置文件中设置图像上载字段。我在网站上的几个地方使用了这张图片,需要在一些页面上为其设置自定义大小。

如果我设置add_image_size( \'homepage-thumb\', 190, 259, true ); 在我的功能文件中,由于上传的图像不是特色帖子或页面图像,如何使用此图像大小?

从我的主页上,这是我获取图像的方式

$author_logo = get_field(\'author_logo\' , \'user_\' . $author_id ); // image field, return type = "Image Object"

然后<img src="<?php echo $author_logo;?>" />

谢谢

2 个回复
SO网友:gmazzap

第一个问题是,自定义字段保存为url,而不是id。因此,您需要从url中检索附件id。首先要使用“guid”字段。

抵制诱惑,找到另一种方法:对于健壮的wordpress代码,您必须认为“guid”不存在,所以请重复“guid不存在”。

一旦“guid”不存在,我们就必须找到另一种方法,这个好方法来自here

function get_logo_id_from_url( $attachment_url = \'\' ) {
    global $wpdb;
    $attachment_id = false;
    if ( \'\' == $attachment_url ) return;
    $upload_dir_paths = wp_upload_dir();
    if ( false !== strpos( $attachment_url, $upload_dir_paths[\'baseurl\'] ) ) {
     $attachment_url = preg_replace(\'/-\\d+x\\d+(?=\\.(jpg|jpeg|png|gif)$)/i\',\'\',$attachment_url);
     $attachment_url = str_replace($upload_dir_paths[\'baseurl\'].\'/\',\'\',$attachment_url);
     $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\'", $attachment_url ) );
    }
    return $attachment_id;
  }
然后,我们使用前面的函数编写另一个函数:

 function author_logo( $author_id = 0, $size = \'\', $alt = \'\' ) {
   if ( ! intval($author_id) ) return;
   $author_logo = get_field(\'author_logo\' , \'user_\' . $author_id );
   if ( filter_var($author_logo, FILTER_VALIDATE_URL) ) return;
   if ( empty($size) ) {
      $nosize = true;
   } else {
      $logo_id = get_logo_id_from_url( $author_logo );
      if ( ! intval($logo_id) ) {
         $nosize = true;
      } else {
        $sizedlogo = wp_get_attachment_image_src(logo_id, $size);
        $nosize = filter_var($sizedlogo[0], FILTER_VALIDATE_URL) ? false : true;
      }
   }
   if ( $nosize ) {
     return sprintf(\'<img src="%s" alt="%s" />\', $author_logo, $alt );
   } else {
     return sprintf(\'<img src="%s" alt="%s" />\', $sizedlogo[0], $alt );
   }
 }
在插件或主题中保存这些函数后functions.php 您可以这样使用它们:

<?php

// print default size
echo author_logo( $author_id ); 

// print in a custom size
echo author_logo( $author_id, \'homepage-thumb\' );

// print in a custom size with custom alt text
echo author_logo( $author_id, \'homepage-thumb\', \'Author Logo\' ); 

?>
代码为untested 但应该可以,除非有任何打字错误。。。

SO网友:Kim

如果它是存储在自定义字段中的全尺寸图像url,则可能会起作用。尝试将此函数放置在函数中。php

function get_attachment_id_from_src ($image_src) {
    global $wpdb;
    $id = \'\';
    if ($image_src){
        $query = "SELECT ID FROM {$wpdb->posts} WHERE guid=\'".$image_src."\'";
        $id = $wpdb->get_var($query);
    }
    return $id;
}
然后通过这种方式获取图像

$author_logo_src = get_field(\'author_logo\' , \'user_\' . $author_id ); // image field
$attachment_id = get_attachment_id_from_src ($author_logo_src);
$attachment_image_src = wp_get_attachment_image_src( $attachment_id, $array(190,259) );
然后

<img src="<?php echo $attachment_image_src[0];?>" width="<?php echo $attachment_image_src[1];?>" height="<?php echo $attachment_image_src[2];?>" alt="User Logo" />
更多信息:wp_get_attachment_image_src

结束

相关推荐

Show Posts to Author Only

我已经在WordPress中为我的一个网站开发了发票系统。我使用了自定义的帖子类型和自定义的元字段,集成的支付网关来满足我的需要。用户一般生成发票上传资金。我使用了来自前端的post提交,以便用户可以自己创建发票。一切都运行顺利,但用户创建的一张发票对其他用户可见。例如,创建的发票,id:APL-2012110489586。用户B可以通过键入domin访问发票。com?发票=APL-2012110489586。现在我想限制其他用户访问发票。只有管理员和发票创建者才能访问发票。所有用户都是订户角色。需要您的

上传到用户配置文件中自定义域的图像的自定义大小? - 小码农CODE - 行之有效找到问题解决它

上传到用户配置文件中自定义域的图像的自定义大小?

时间:2013-03-03 作者:Anagio

我正在使用高级自定义字段,并在用户配置文件中设置图像上载字段。我在网站上的几个地方使用了这张图片,需要在一些页面上为其设置自定义大小。

如果我设置add_image_size( \'homepage-thumb\', 190, 259, true ); 在我的功能文件中,由于上传的图像不是特色帖子或页面图像,如何使用此图像大小?

从我的主页上,这是我获取图像的方式

$author_logo = get_field(\'author_logo\' , \'user_\' . $author_id ); // image field, return type = "Image Object"

然后<img src="<?php echo $author_logo;?>" />

谢谢

2 个回复
SO网友:gmazzap

第一个问题是,自定义字段保存为url,而不是id。因此,您需要从url中检索附件id。首先要使用“guid”字段。

抵制诱惑,找到另一种方法:对于健壮的wordpress代码,您必须认为“guid”不存在,所以请重复“guid不存在”。

一旦“guid”不存在,我们就必须找到另一种方法,这个好方法来自here

function get_logo_id_from_url( $attachment_url = \'\' ) {
    global $wpdb;
    $attachment_id = false;
    if ( \'\' == $attachment_url ) return;
    $upload_dir_paths = wp_upload_dir();
    if ( false !== strpos( $attachment_url, $upload_dir_paths[\'baseurl\'] ) ) {
     $attachment_url = preg_replace(\'/-\\d+x\\d+(?=\\.(jpg|jpeg|png|gif)$)/i\',\'\',$attachment_url);
     $attachment_url = str_replace($upload_dir_paths[\'baseurl\'].\'/\',\'\',$attachment_url);
     $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\'", $attachment_url ) );
    }
    return $attachment_id;
  }
然后,我们使用前面的函数编写另一个函数:

 function author_logo( $author_id = 0, $size = \'\', $alt = \'\' ) {
   if ( ! intval($author_id) ) return;
   $author_logo = get_field(\'author_logo\' , \'user_\' . $author_id );
   if ( filter_var($author_logo, FILTER_VALIDATE_URL) ) return;
   if ( empty($size) ) {
      $nosize = true;
   } else {
      $logo_id = get_logo_id_from_url( $author_logo );
      if ( ! intval($logo_id) ) {
         $nosize = true;
      } else {
        $sizedlogo = wp_get_attachment_image_src(logo_id, $size);
        $nosize = filter_var($sizedlogo[0], FILTER_VALIDATE_URL) ? false : true;
      }
   }
   if ( $nosize ) {
     return sprintf(\'<img src="%s" alt="%s" />\', $author_logo, $alt );
   } else {
     return sprintf(\'<img src="%s" alt="%s" />\', $sizedlogo[0], $alt );
   }
 }
在插件或主题中保存这些函数后functions.php 您可以这样使用它们:

<?php

// print default size
echo author_logo( $author_id ); 

// print in a custom size
echo author_logo( $author_id, \'homepage-thumb\' );

// print in a custom size with custom alt text
echo author_logo( $author_id, \'homepage-thumb\', \'Author Logo\' ); 

?>
代码为untested 但应该可以,除非有任何打字错误。。。

SO网友:Kim

如果它是存储在自定义字段中的全尺寸图像url,则可能会起作用。尝试将此函数放置在函数中。php

function get_attachment_id_from_src ($image_src) {
    global $wpdb;
    $id = \'\';
    if ($image_src){
        $query = "SELECT ID FROM {$wpdb->posts} WHERE guid=\'".$image_src."\'";
        $id = $wpdb->get_var($query);
    }
    return $id;
}
然后通过这种方式获取图像

$author_logo_src = get_field(\'author_logo\' , \'user_\' . $author_id ); // image field
$attachment_id = get_attachment_id_from_src ($author_logo_src);
$attachment_image_src = wp_get_attachment_image_src( $attachment_id, $array(190,259) );
然后

<img src="<?php echo $attachment_image_src[0];?>" width="<?php echo $attachment_image_src[1];?>" height="<?php echo $attachment_image_src[2];?>" alt="User Logo" />
更多信息:wp_get_attachment_image_src

相关推荐

Can you set a role as author?

我是WordPress的新手,我正在尝试找出如何最好地设置权限。我想限制人员组只编辑某些页面(IT部门只编辑IT页面,人力资源部门只编辑人力资源页面等等)。据我所知,您取消了角色“编辑其他页面”的权限,然后将页面的作者设置为您要编辑的人。是否有一种设置多个作者的标准方法,或者是否有一种使角色成为作者而不是单个用户的方法?谢谢