使用_POST_THMBIAN()或相关函数显示高度和宽度属性

时间:2015-01-05 作者:hunterhogan

问题我想要heightwidth 中的属性img 文章、页面或自定义文章类型的特征图像的元素。

环境我有一个基于BlankSlate theme.在“设置/媒体”中,我没有更改默认图像大小功能。php包含add_theme_support( \'post-thumbnails\' );.
  • 在“设置/媒体”中,“将缩略图裁剪为精确尺寸”框未选中。因此,我有一些缩略图,它们不完全是150像素x 150像素
  • Edit: 我仍然需要来自特色图像功能的其他自动属性,例如altclass.
  • 电流输出example page on my website, 功能图像的完整HTML当前为

    <img src="http://i2.wp.com/www.hunterthinks.com/wp-content/uploads/2014/11/favicon-160x160.png?fit=150%2C150" class="attachment-thumbnail wp-post-image" alt="HunterThinks.com">
    
    作为一个理想主义者,我通常想要高度和宽度,但高度的缺乏导致了我当前主题的布局问题。如您所见,最后一幅特色图片超出了<section> 元素,看起来很糟糕。

    标题的当前代码。php很大,所以我会跳过它,除非有人认为我的问题在那里。

    category.php

    <?php get_header(); ?>
    <section>
      <header><h1><?php _e( \'Main page: \', \'goldenratio\' ); ?><?php single_cat_title(); ?></h1></header>
      <?php if ( \'\' != category_description() ) echo apply_filters( \'archive_meta\', category_description() ); ?>
      <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
      <?php get_template_part( \'entry\', \'summary\' ); ?> # FEATURED IMAGE COMES FROM HERE
      <?php endwhile; endif; ?>
      <?php get_template_part( \'nav\', \'below\' ); ?>
    </section>
    <?php get_footer(); ?>
    

    entry-summary.php

    <?php the_title( \'<h1 class="clear">\', \'</h1>\' ); ?>
    <?php if ( has_post_thumbnail() ) { 
        echo \'<figure class="clear-right"><a href="\';
        the_permalink();
        echo \'">\';
        the_post_thumbnail( \'thumbnail\' );
        echo \'</a></figure>\';
        } ?>
    <?php the_excerpt(); ?>
    <a href="<?php the_permalink(); ?>" title="Go to the page">&rArr;&nbsp;Read&nbsp;&rArr;</a>
    

    class="clear-right"

    我无法想象为什么这个类会影响事情,但万一我错了,我就把它包括在这里。

    .clear-right{
     clear:right;
     float:right;
     margin-bottom:1em;
     margin-left:1.827%;}
    
    尝试失败我尝试使用wp_get_attachment_image_src() 但我想我没有正确编码,因为我甚至无法显示图像。我没有我尝试过的代码示例the_post_thumbnail( $size, $attr ) 以及调整$attr 数组基于中的文档wp_get_attachment_image() 但我很肯定这永远不会奏效有人能帮我处理我缺少的代码、概念和参考资料吗。我有一种感觉,当我知道答案时,我会觉得有点傻,但我确实想解决这个问题。

    提前谢谢。

    5 个回复
    最合适的回答,由SO网友:Alex Sancho 整理而成

    您可以使用“”收集图像属性wp_get_attachment_metadata,请参见以下示例作为起点

    function mytheme_post_thumbnail( $size = \'post-thumbnail\', $attr = \'\', $post_id = null ) {
        if ( has_post_thumbnail( $post_id ) ) {
            $meta      = wp_get_attachment_metadata( get_post_thumbnail_id( $post_id ) );
    
            $args[\'width\']  = $meta[\'sizes\'][$size][\'width\'];
            $args[\'height\'] = $meta[\'sizes\'][$size][\'height\'];
    
            $args[\'alt\']   = isset( $attr[\'alt\'] ) ? $attr[\'alt\'] : apply_filters( \'post_title\', get_post( $post_id )->post_title );
            $args[\'title\'] = isset( $attr[\'title\'] ) ? $attr[\'title\'] : apply_filters( \'post_title\', get_post( $post_id )->post_title );
            $args[\'class\'] = isset( $attr[\'class\'] ) ? $attr[\'class\'] : \'\';
    
            $thumbnail = wp_get_attachment_image( get_post_thumbnail_id( $post_id ), $size, false, $args);
    
            echo $thumbnail;
        } else {
            printf( \'<img src="%1$s/images/default-thumb.png" alt="%2$s" />\', get_template_directory_uri(), the_title_attribute( [  \'echo\' => false ] ) );
        }
    }
    

    SO网友:MMK

    如果您只想在img标记中显示图像的大小(宽度和高度),如

    <img src="source_of_your_image" width="500" height="250"/>
    
    然后使用以下php代码:

    $MySrc = "source_of_your_image";
    $Myimg = "<img src=\'$MySrc\' ";
    $TheImg = (array)getimagesize($MySrc);
    $Myimg .= $TheImg[3]."/>";
    
    有关使用getimagesize()的更多信息,请访问http://php.net/manual/en/function.getimagesize.php

    SO网友:Privateer

    我通常会使用以下内容:

    if ( current_theme_supports(\'post-thumbnails\') && has_post_thumbnail() ) {
        $post_thumb_id = get_post_thumbnail_id($id);
        $image_data = wp_get_attachment_image_src($post_thumb_id, \'thumbnail\');
        $attr_title = esc_attr($title);
        $image = <<<HTML
    <div class="thumbnail"><img id="attachment_{$post_thumb_id}" src="{$image_data[0]}" width="{$image_data[1]}" height="{$image_data[2]}" alt="{$attr_title}" /></div>
    HTML;
    
    } else {
        $image = \'\';
    }
    
    使用您的代码,请尝试:

    <?php the_title( \'<h1 class="clear">\', \'</h1>\' ); ?>
    <?php 
    if ( has_post_thumbnail() ) { 
        echo \'<figure class="clear-right"><a href="\';
        the_permalink();
        echo \'">\';
        # The next line grabs the image source meta using the post thumbnail id
        $image_data = wp_get_attachment_image_src(get_post_thumbnail_id(), \'thumbnail\');
        $attr_title = esc_attr( get_the_title() );
        # image_data is an array ( src => \'...\', \'width\' => int, \'height\' => \'int\', ...)
        # so you can grab $image_data[0] as the source, $image_data[1] as the width, and $image_data[2] as the height
        $image_tag = <<<HTML
    <img src="{$image_data[0]}" width="{$image_data[1]}" height="{$image_data[2]}" alt="{$attr_title}" />
    HTML;
    
        #now that tag is built, just draw it out.
        echo $image_tag;
        echo \'</a></figure>\';
    } ?>
    <?php the_excerpt(); ?>
    <a href="<?php the_permalink(); ?>" title="Go to the page">&rArr;&nbsp;Read&nbsp;&rArr;</a>
    
    这应该能帮你找到你想要的东西。

    SO网友:shyammakwana.me

    wp_get_attachment_image 此功能可以帮助您。

    使用此函数,您的文件如下所示。。。

    entry-summary.php

    <?php the_title( \'<h1 class="clear">\', \'</h1>\' ); ?>
    <?php if ( has_post_thumbnail() ) { 
        $attachment_id = get_post_thumbnail_id( get_the_ID() );
        $default_attr = array(
            \'src\'   => $src,
            \'class\' => "attachment-$size",
            \'alt\'   => trim(strip_tags( get_post_meta($attachment_id, \'_wp_attachment_image_alt\', true) )),
        );
    
        echo \'<figure class="clear-right"><a href="\';
        the_permalink();
        echo \'">\';
        //the_post_thumbnail( \'thumbnail\' );
        wp_get_attachment_image( $attachment_id, \'thumbnail\',1 , $default_attr );
        echo \'</a></figure>\';
        } ?>
    <?php the_excerpt(); ?>
    <a href="<?php the_permalink(); ?>" title="Go to the page">&rArr;&nbsp;Read&nbsp;&rArr;</a>
    
    要获取高度和宽度,请使用wp_get_attachment_metadata 沿代码上方宽度的函数。

    我没有从我这边测试代码,只是从codex得到了一个示例。希望这能奏效。

    更新2:

    $attachment_id = get_post_thumbnail_id(get_the_ID()); 
    $metadata = wp_get_attachment_metadata($attachment_id);
    $height =  $metadata[\'height\'];
    $width =  $metadata[\'width\'];
    $alt = trim(strip_tags( get_post_meta($attachment_id, \'_wp_attachment_image_alt\', true) )) ; 
    $src =  wp_get_attachment_url( $attachment_id );
    $class = \'attachment-\'.$attachment_id;
    
    echo \'<img src="\'.$src.\'" height="\'.$height.\'" width="\'.$width.\'" alt="\'.$alt.\'" class="\'.$class.\'" />\';
    
    更新3:要获取缩略图的高度和宽度,请按如下所示更改代码行。

    $height =  $metadata[\'sizes\'][\'thumbnail\'][\'height\'];
    $width  =  $metadata[\'sizes\'][\'thumbnail\'][\'width\'];
    

    SO网友:Aron

    EDIT:默认情况下,WordPress在上传拇指时会将拇指裁剪为150x150px。当您取消选中中的框时Settings>Media WordPress不会重新生成现有缩略图,它只会在上载新图像时生成成比例的图像。简言之,我认为您的问题不在于用于显示缩略图的代码,而在于图像本身。

    但是,要以html格式输出具有宽度、高度、alt和类的缩略图图像,以下代码将生成所需的结果:

    $post_id = $post->ID; // current post id
    $thumb_id = get_post_thumbnail_id($post_id);
    $size = \'thumbnail\';
    if ( \'\' != get_the_post_thumbnail($post_id) ) { // checks we have a thumbnail
        echo wp_get_attachment_image($thumb_id, $size);
    }
    

    If the output result using my code is still 150px by 150px please try re-uploading the image.

    结束

    相关推荐

    每页完全不同的Functions.php?

    是否可以通过条件加载完全不同的函数?i、 函数中的e。php您有一个条件加载在旧函数的include中,然后有另一个条件加载在新函数中?这样做的原因是一个网站正在呈现新的面貌,但只是一页一页,旧的样式和功能很混乱,需要更换,但我不能只是删除它们,因为网站的其余部分将失败。