wp_get_attachment_image_src() nu returnează ceea ce mă aștept

30 iul. 2013, 17:33:43
Vizualizări: 17.5K
Voturi: 0

Am această problemă enervantă pe care nu o pot rezolva:

if( $meta1 = '' && $meta2 = '' ) { 
// Obține URL-ul imaginii cu dimensiunile personalizate
$image_attributes = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), my_own_size_function());
echo  $image_attributes[0];
} elseif(  $meta1 != '' ) { 
    echo $meta1; 
} elseif ( $meta2  != '' ){
    $image_attributes = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), my_own_size_function() );
    echo $image_attributes[0];
} else {
    echo "ko";
}

Când folosesc print_r pe my_own_size_function() primesc un array ca acesta:

Array
(
     [0] => 600
     [1] => 400
)

Dar când folosesc print_r pe $image_attributes primesc un alt rezultat:

Array
(
    [0] => http://localhost/wordpress/wp-content/uploads/2013/07/my_image.jpg
    [1] => 200
    [2] => 150
    [3] => 
)

Are cineva vreo idee care ar putea fi motivul pentru aceasta? Mulțumesc anticipat.

0
Toate răspunsurile la întrebare 2
2

Modifică funcția my_own_size_function(); în array(600, 400)

$image_attributes = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), array(600, 400));
30 iul. 2013 17:47:22
Comentarii

Mulțumesc, dar ar trebui să fie array(600,400). Oricum, am încercat deja asta, dar am verificat funcția în codex și ei spun că $size poate fi un array, funcția mea returnează deja array(600,400);

JMau JMau
30 iul. 2013 17:51:02

Și ai imaginea încărcată în acea dimensiune?

Pontus Abrahamsson Pontus Abrahamsson
30 iul. 2013 17:55:45
2

Următoarele informații se bazează pe experimente efectuate în ultimele 15 minute, așa că nu le-aș numi canonice, dar...

wp_get_attachment_image_src() utilizează funcția image_downsize(), care va încerca să găsească și să returneze imaginea cea mai apropiată ca dimensiune de valorile furnizate. Dacă experimentați cu dimensiuni cunoscute ale imaginilor (priviți imaginile salvate în wp-content/uploads), veți înțelege la ce mă refer. În ciuda numelui, uneori poate returna imagini mai mari, dar componentele înălțime și lățime din array ar trebui să fie setate la valorile furnizate sau la o aproximare scalată (după cum se pare) dacă aceste valori sunt extrem de inexacte. Nu pot spune dacă această "scalare" este ceea ce se întâmplă în cazul dvs., dar este posibil și pare plauzibil.

Să dau un exemplu. Am o imagine salvată la 150x150, 293x300 și la dimensiunea completă. Acest cod...

var_dump(wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), array(20, 20)));

... returnează un array cu imaginea 150x150 și dimensiunile pe care le-am furnizat—20x20. Totuși, acest cod...

var_dump(wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), array(200, 250)));

... returnează URL-ul imaginii 150x150, dar cu dimensiunile 200x204. Acestea nu sunt dimensiunile pe care le-am furnizat. Valorile dimensiunilor au fost modificate de un algoritm. După investigații suplimentare, se pare că image_constrain_size_for_editor este un candidat mai probabil.

De asemenea, puteți verifica dacă ceva a aplicat o funcție la filtrul image_downsize, deoarece acesta poate prelua complet controlul asupra funcției.

30 iul. 2013 18:23:47
Comentarii

Mulțumesc pentru răspuns. Lectură interesantă, dar problema este că dimensiunea nici măcar nu se schimbă. Am inclus un selector de dimensiune pentru imaginea reprezentativă. Nu pare să vină din my_own_size_function() pur și simplu pentru că obțin ce vreau când folosesc print_r

JMau JMau
30 iul. 2013 18:37:03

Cred că eu sunt legătura cea mai slabă! Am verificat încărcările și lucram cu singura imagine care nu avea dimensiunea potrivită.

JMau JMau
30 iul. 2013 18:43:13