wp_get_attachment_image返回不同​​的图像大小

时间:2012-02-21 11:21:22

标签: ajax wordpress thumbnails

这是一个错误?

wp_get_attachment_image( $attachment_id, 'post-thumb-size-small');

相同的代码,在模板中调用,在AJAX调用中返回相同的图像SRC,但图像宽度和高度不同。

从模板调用转储:

<img width="286" height="189" src="http://localhost/site/files/2012/02/post-image-31-286x189.jpg" class="attachment-post-thumb-size-small" alt="post-image-3" title="post-image-3">

从AJAX调用转储

<img width="220" height="145" src="http://localhost/site/files/2012/02/post-image-31-286x189.jpg" class="attachment-post-thumb-size-small" alt="post-image-3" title="post-image-3">

我很困惑,怎么回事?

index.php代码

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

<?php include 'post.php'; ?>

<?php endwhile; endif; ?>

post.php代码

<div class="container">

<?php

  $theme->theme_post->display_post_element( $post_type, $post_size, $post);

?>
</div>

display_post_element功能代码

    function display_post_element( $post_type, $post_size, $post) {
$attachment_id = get_post_meta( $post->ID, '_view_attachment_id', true);
        if( $post_type == 'single_image') {
            $img = wp_get_attachment_image_src( $attachment_id, 'full');

            if( is_array( $img)):                
            ?>
            <div class="preview-thumb">
                <a href="<?php echo $img[0]; ?>" class="lightbox"><?php echo wp_get_attachment_image( $attachment_id, 'post-thumb-size-' . $post_size); ?></a>
                <a href="<?php echo $img[0]; ?>" class="lightbox zoom"></a>
            </div>
            <?php
            endif;
        }
}

使用ajax调用代码加载帖子:

function load_posts_ajax() {
    global $post;
    $query_string = $_POST['query_string'];

    query_posts( $query_string . '&posts_per_page=' . get_option( 'posts_per_page') . '&post_status=publish&offset=' . (int)$_POST[ 'off']);

    if ( have_posts() ) : while ( have_posts() ) : the_post();
        include TEMPLATEPATH . '/post.php';
    endwhile; endif;

    die;
}

我在主题构造函数中的functions.php中定义了图像大小。 我转储get_intermediate_image_sizes()并在AJAX调用中加载所有图像大小

3 个答案:

答案 0 :(得分:0)

很奇怪......你试过用数组设置大小吗?

wp_get_attachment_image( $attachment_id, array(220,145)); // for 220x145

答案 1 :(得分:0)

确实是一个错误。我遇到了同样的问题,因为我们有类似的情况,我认为它与AJAX调用有关 - 但是谁知道为什么它会返回错误的尺寸。 但是 ,我找到了一个解决方法,虽然这是一个相当古老的问题,但我认为其他人可能会遇到此问题。

我的解决方案是:

首先,您使用wp_get_attachment_image_src获取图片的网址。

$image = wp_get_attachment_image_src($attachment_id, 'image size name');

(您可以使用get_posts()获取附件ID。)

然后,您可以在$image[0]中找到图片的网址。所以我所做的就是放入正确的尺寸:

<img src="'.$image[0].'" width="960" height="300" />

它并不理想,但至少它有效。它可以在WP 3.5中修复,但我不知道,我还在使用3.4.2。

答案 2 :(得分:0)

不是 media.php editor_max_image_size末尾的image_constrain_size_for_editor()吗?众所周知,它会混淆wp_get_attachment_image()的输出。

function bypass_editor_max_image_size(){
    if(!empty($width) && !empty($height)){
        return array($width, $height);
    }else{
        return;
    }
}

然后在你的调用中添加/删除它以获取图像src和大小。

add_filter('editor_max_image_size', array($this, 'bypass_editor_max_image_size'));
$image = wp_get_attachment_image_src($photo, $size);
remove_filter('editor_max_image_size', array($this, 'bypass_editor_max_image_size'));