0

注目の画像をアップロードするときは、幅を「100%」にしたいのですが、1170pxを超える場合に限ります。幅が1170pxから770pxの場合は、「770px」の幅にします。それ以外の場合、幅は変更されません。

これまでのところ、このコードは私が望むことを実行しています:

if (intval($width) >= 1170) {
        $hwstring = 'width=100%';
    } elseif ( (intval($width) < 1170) && (intval($width) >= 770) ) {
        $hwstring = 'width=770px';
    } else {
        $hwstring = image_hwstring($width, 0);
    };

ただし、「wp-includes」フォルダー内のmedia.phpファイルを変更しましたが、これは明らかに正しい方法ではありません。では、既存のWordpressコードを変更せずに、同じことを行う関数を作成するにはどうすればよいでしょうか。

function wp_get_attachment_image($attachment_id, $size = 'thumbnail', $icon = false, $attr = '') {

$html = '';
$image = wp_get_attachment_image_src($attachment_id, $size, $icon);
if ( $image ) {
    list($src, $width, $height) = $image;
    $hwstring = image_hwstring($width, $height);
    if ( is_array($size) )
        $size = join('x', $size);
    $attachment =& get_post($attachment_id);
    $default_attr = array(
        'src'   => $src,
        'class' => "attachment-$size",
        'alt'   => trim(strip_tags( get_post_meta($attachment_id, '_wp_attachment_image_alt', true) )), // Use Alt field first
        'title' => trim(strip_tags( $attachment->post_title )),
    );
    if ( empty($default_attr['alt']) )
        $default_attr['alt'] = trim(strip_tags( $attachment->post_excerpt )); // If not, Use the Caption
    if ( empty($default_attr['alt']) )
        $default_attr['alt'] = trim(strip_tags( $attachment->post_title )); // Finally, use the title

    $attr = wp_parse_args($attr, $default_attr);
    $attr = apply_filters( 'wp_get_attachment_image_attributes', $attr, $attachment );
    $attr = array_map( 'esc_attr', $attr );

    if (intval($width) >= 1170) {
        $hwstring = 'width=100%';
    } elseif ( (intval($width) < 1170) && (intval($width) >= 770) ) {
        $hwstring = 'width=770px';
    } else {
        $hwstring = image_hwstring($width, 0);
    };

    $html = rtrim("<img $hwstring");
    foreach ( $attr as $name => $value ) {
        $html .= " $name=" . '"' . $value . '"';
    }
    $html .= ' />';
}

return $html;
}
4

1 に答える 1

0

残念ながら、その関数でこれを正確に行うために使用するフックはありませんが、コアのWordpressファイルを変更せずに自分で構築できます(アップグレード時にカスタムコードを上書きしないようにする必要はありません)。 。wp_get_attachment_image_src()関数が戻り値をフィルターに渡して、あなたが話していることを正確に実行しないことにちょっと驚いています。

この関数の上部を見ると、$src, $width, $heightを呼び出す$image = wp_get_attachment_image_src($attachment_id, $size, $icon);ことでとの配列を取得できます。これと同じ呼び出しを自分で行い、カスタム幅を作成できます。基本的に、functions.phpまたはカスタム関数プラグインのカスタムバージョンに関数をコピーします。

この機能を将来のバージョンで追加するように要求する場合は、 http://core.trac.wordpress.org/newticketで新しいチケットを作成できます。追加はwp_get_attachment_image_src()、(WPの現在のトランクバージョンの)ライン515になります。

return apply_filters( 'wp_get_attachment_image_src', array( $src, $width, $height ), $attachment_id, $size, $icon );

編集:チケットはすでに存在します、パッチは少し奇妙です、私は新しいものを提出しましたが、それが承認された場合にいつ入るかについての保証はありません。

于 2012-11-08T06:54:45.323 に答える