Resim boyutu niteliklerini kaldırmak için filtre?


35

Görüntüler üzerinde, onları içeren sütunun genişliğine göre maksimum genişlik ayarlayan bir akışkan genişliği css şablonuna dayanan bir sitede çalışıyorum ve WordPress'in görüntülere eklediği satır içi genişlik ve yükseklik boyut niteliklerini kaldırmam gerekiyor .

Bu filtreyle öne çıkan resimlerimle yapıyorum:

add_filter( 'post_thumbnail_html', 'remove_thumbnail_dimensions', 10, 3 );

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

Gerekirse , aynı filtreyi thecontent'a uygulayabileceğimi biliyorum . Ama bunu yapmanın daha iyi bir yolu var mı?


Öncelikle, çok yardımcı kod için teşekkürler. İmg etiketinden genişlik ve yükseklik özniteliklerini çıkartmak için mükemmel çalışır, ancak bir nedenden ötürü herhangi bir sebepten altyazı kısa kodunu soyunmuş gibi görünür. Bunun neden olduğunu ve nasıl düzeltileceğini bilen var mı?
Dominic P

1
Belki bunu kendi sorusu olarak göndermelisin? Kendi cevabını hakettiği benimkinden yeterince farklı görünüyor. Yine de, bu cevabı bulan ve aynı soruna sahip olan başka biri için deneyeceğim ve cevaplayacağım: Sorununuz, img_caption_shortcodealtyazı kısa kodunu işleyen fonksiyonun , altyazı kısa kod özniteliklerinde bir genişlik belirtilmesini gerektirmesidir. Aksi takdirde, başlığı tamamen atlar ve yalnızca kısa [caption]kod etiketlerinin içine sarılı içeriği döndürür .
goldenapples

Resim yazısı kısa kodlarını tanımlanmış bir genişliğe sahip olmadan kullanmak istiyorsanız, resim yazısı işaretlemenizi filtreye bağlı bir işlevde tanımlamanız gerekir img_caption_shortcode. Böyle bir fonksiyon için kod yazmak, burada yorumlara sığabileceğimden daha fazla.
goldenapples

@goldenapples, yararlı cevabınız için teşekkürler. Önerdiğiniz gibi yaptım ve burada yeni bir soru sordum: wordpress.stackexchange.com/questions/32931/… . Bu konuda herhangi bir giriş büyük takdir edilecektir. Soruda açıkladığım gibi, filtrenin img_caption_shortcodesorunu çözmek için yeterli olacağından emin değilim .
Dominic P,

1
Belki de gerçek içeriğinizi görmeden ne yapmaya çalıştığınızın büyük resmini özlüyorum, ancak bu yalnızca CSS kullanılarak düzeltilemez mi? Resimlerinizde maksimum genişlik kullanıyorsanız, yükseklik ekleyerek yükseklik sorununu çözebilmelisiniz: auto; içerik resimlerinize.
binaryorganic

Yanıtlar:


36

Herkese teşekkürler!

İmage_send_to_editor filtresi ... için teşekkür arıyordu biriydi @ it işaret için t31os.

İşte şimdi fonksiyonlarım.

add_filter( 'post_thumbnail_html', 'remove_thumbnail_dimensions', 10 );
add_filter( 'image_send_to_editor', 'remove_thumbnail_dimensions', 10 );

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

Bu, satır içi boyut özniteliklerini alınan görüntülerden kaldırır the_post_thumbnail()ve bu özniteliklerin düzenleyiciye eklenen yeni görüntülere eklenmesini önler. Bunları alınan resimlerden wp_get_attachment_imageveya diğer ilgili işlevlerden (orada kanca yok) çıkarmaz, ancak bu durumlarda gerektiğinde şablon dosyalarında işlenebilir.


1
\ 'Yi regex'ten kaldırmak zorunda kaldım. Ondan sonra iyi çalıştı. Sanırım, yükseklik ayarındaki son çift alıntıdan sonra arkada boşluk bırakmadığımdandı.
MattSlay

1
@MattSlay Sitenin içeriğini kalıcı olarak değiştirmekle ilgili bir sorun mu var? Duyarlı bir tema, doğru biçimde biçimlendirmek için web sitesinin içeriğini değiştirmek zorunda olmamalıdır. Bu blog gönderisiniimage_send_to_editor beğenerek filtreyi kaldırmak ve yerine eklemek için oy kullanıyorum . Bu sunum mantığını içerikten ayırır. the_content
BFTrick

1
@BFTrick - Bana bir bağlam meselesi gibi geliyor. Duyarlı bir tema için sizinle aynı fikirdeyim çünkü bu şekilde işlenen mevcut içeriğe güvenemezsiniz ve bir sonraki temanın bu boyut özelliklerine ihtiyaç duyacağını bilemezsiniz. Benim durumumda, temanın içeriğin ayrılmaz olduğu bir uygulama inşa ediyordum, bu yüzden ilk eklendiklerinde görüntülerin işlenmesi için daha az işlemci ağırlıklı bir yöntem seçtim. Ama iyi bir noktaya değindin.
goldenapples

2
Uyarı: Bu cevap, WordPress 3.5.1'deki resim başlıklarını keser.
kablolu

5

Bu betiği biraz değiştirdim. Yardım için teşekkürler!

add_filter( 'post_thumbnail_html', 'remove_thumbnail_dimensions', 10 );
add_filter( 'image_send_to_editor', 'remove_thumbnail_dimensions', 10 );
// Genesis framework only
add_filter( 'genesis_get_image', 'remove_thumbnail_dimensions', 10 );
// Removes attached image sizes as well
add_filter( 'the_content', 'remove_thumbnail_dimensions', 10 );
function remove_thumbnail_dimensions( $html ) {
    $html = preg_replace( '/(width|height)=\"\d*\"\s/', "", $html );
    return $html;
}

5
Yine de dikkatli ol. The_content öğesinin filtrelenmesi ayrıca youtube videolarına ve diğer genişlik / yükseklik özelliklerine filtre uygular.
MikeNGarrett

1
Doğru, ancak bu duyarlı bir sitede iyi bir şey olabilir. Birinin görüntüler için yapması gerekiyorsa, o zaman muhtemelen başka medya için de yapması gerekir.
BFTrick

1

function.php 'de resim boyutunu "galeri" olarak ayarladıysanız

add_image_size( 'gallery', 200, 120, true );

"galeri" gibi belirli bir resim boyutunun genişliğini ve yüksekliğini kaldırabilirsiniz:

add_filter( 'post_thumbnail_html', 'remove_thumbnail_dimensions', 10, 4 );

function remove_thumbnail_dimensions( $html, $post_id, $post_image_id,$post_thumbnail) {
    if ($post_thumbnail=='gallery'){
    $html = preg_replace( '/(width|height)=\"\d*\"\s/', "", $html );
    }
    return $html;
}

0

Bu filtrenin uygulanması the_contenttüm içerik için onu tetikleyecektir. Bu etkili olacaktır, ancak sitenizin performansını ve yükleme süresini etkileyebilir. WordPress'e görüntüleri ilk sıraya yerleştirirken satır içi genişlik ve yükseklik etiketlerini eklememesini söylerseniz daha iyi olur.

Ne yazık ki, görüntüyü gerçekten ekleyen komut dosyaları JavaScript'te yerleşiktir ve TinyMCE wysiwyg editörüyle etkileşime girer. Doğrudan bağlanmanın bir yolu olabilir, ancak standart add_filter()çağrıları kullanmazsınız.


1
image_send_to_editorBurada bir iş üzerinde bir filtre olmaz mıydı?
t31os

@ t31os - Sanırım aradığım şey buydu! Neden daha önce o kancayı görmedim bilmiyorum.
goldenapples

Şey, kesinlikle yardımcı olacağını umuyorum, işe yarayacak gibi görünüyor ... bize rapor verin ve bize bildirin. :)
t31os

@ t31os Yup, numarayı yaptı! Teşekkürler! Önce sen cevaplamazsan, cevap olarak gönderirim.
goldenapples,

2
Sen onun için gidiyorum dostum, fazla telaşlanmıyorum, bir çözüm bulabildiğin için mutluyum ...;)
t31os
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.