wordpress wp_get_attachment_image返回不同的图像大小

3lxsmp7m  于 2022-12-29  发布在  WordPress
关注(0)|答案(4)|浏览(204)

是窃听器吗?

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>

显示后元素功能代码

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;
}

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

vulvrdjw

vulvrdjw1#

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

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

km0tfn4u2#

这确实是一个bug。我也遇到过同样的问题,因为我们有过类似的情况,所以我认为这与 AJAX 调用有关-,不过,谁知道为什么它会返回错误的维度。***但是,***,我找到了一个解决方法,虽然这是一个相当古老的问题,但我认为其他人可能会遇到这个问题。
我的解决方案是:
首先,使用wp_get_attachment_image_src获取图像的url。
第一个月
(You可以使用get_posts()获取附件ID。)
然后你就有了$image[0]中图像的URL,所以我所做的是把它放在正确的维度中:
<img src="'.$image[0].'" width="960" height="300" />
这不是理想的,但至少它的工作。它可能是固定在WP 3.5,但我不知道,我仍然使用3.4.2。

0sgqnhkj

0sgqnhkj3#

这不是media.phpimage_constrain_size_for_editor()末尾的editor_max_image_size吗?众所周知,它会扰乱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'));
goqiplq2

goqiplq24#

你可以通过在functions.php中插入这两行代码来删除自动生成的行内高度和宽度

add_filter( 'wp_get_attachment_image', 'remove_width_attribute', 10 );
add_filter( 'post_thumbnail_html', 'remove_width_attribute', 10 );
add_filter( 'image_send_to_editor', 'remove_width_attribute', 10 );

function remove_width_attribute( $html ) {
   $html = preg_replace( '/(width|height)="\d*"\s/', "", $html );
   return $html;
}

相关问题