xóa hoặc cập nhật add_image_size


16

Tôi đang làm việc với một chủ đề có một số kích thước hình ảnh được xác định chính xác bằng cách sử dụng:

add_image_size( 'name', 500, 200, true );

Tôi muốn ghi đè các kích thước được xác định này từ chủ đề con:

add_image_size( 'new-name', 400, 300, true );

Tôi biết tôi có thể thêm kích thước mới, nhưng nếu tôi thêm cùng tên tức là:

add_image_size( 'name', 400, 300, true );

Sau đó, cuộc gọi hàm cha mẹ được sử dụng - cuộc gọi con bị bỏ qua - thêm quy tắc bổ sung thêm hình ảnh bổ sung sẽ không bao giờ được sử dụng - nó không quá tệ, nhưng nó không hiệu quả.

Có một chức năng để đăng ký lại một kích thước hình ảnh được thêm vào?

Chúc mừng!

cá đuối


Bạn có thể vui lòng gửi toàn bộ mã có liên quan? Là các add_image_size()cuộc gọi chỉ ngồi trần truồng functions.php, hoặc chúng được bao bọc đúng cách trong một cuộc gọi lại và được nối vào after_setup_theme? Biết đó là quan trọng để trả lời câu hỏi của bạn.
Chip Bennett

hi chip - cảm ơn vì nhận xét của bạn - bạn đã đúng, nó được gói gọn trong after_setup_theme - vì vậy đây là tất cả về ưu tiên một lần nữa - tôi luôn nhớ điều đó!
Q Studio

Câu trả lời:


22

Các add_image_size( $name, $width, $height, $crop )chức năng là đủ duyên dáng để xử lý nhiều cuộc gọi bằng cách sử dụng cùng một $name. Nó chỉ đơn giản ghi đè lên giá trị hiện có :

$_wp_additional_image_sizes[$name] = array( 'width' => absint( $width ), 'height' => absint( $height ), 'crop' => (bool) $crop );

Vì vậy, điều đó có nghĩa là tất cả những gì bạn cần làm để ghi đè định nghĩa của Chủ đề gốc về kích thước hình ảnh tùy chỉnh là để đảm bảo rằng cuộc gọi của bạn sẽ add_image_size()kích hoạt sau cuộc gọi của Chủ đề gốc .

Giả sử rằng Chủ đề phụ huynh thích như vậy:

function parent_theme_setup() {
    add_image_size( 'name', 500, 200, true );
    add_image_size( 'new-name', 400, 300, true );
}
add_action( 'after_setup_theme', 'parent_theme_setup' );

Sau đó, add_image_size()cuộc gọi của Chủ đề gốc sẽ kích hoạt after_setup_thememóc, ở mức ưu tiên mặc định (nghĩa là 10).

(Lưu ý: nếu các cuộc gọi không được bao bọc trong một cuộc gọi lại, thì chúng sẽ bắn vào plugins_loadedmóc, ở mức độ ưu tiên 10.)

Đây là phần quan trọng: tệp của Chủ đề con functions.phpđược phân tích cú pháp trước Chủ đề gốc , vì vậy nếu bạn sử dụng cùng một móc để thực hiện add_image_size()cuộc gọi của mình , chúng sẽ bị ghi đè bởi các add_image_size()cuộc gọi của Chủ đề gốc .

Giải pháp là sử dụng móc sau hoặc mức độ ưu tiên thấp hơn , để đảm bảo rằng add_image_size()cuộc gọi của Chủ đề con sẽ kích hoạt sau Chủ đề gốc.

Điều này sẽ thực hiện thủ thuật, bất kể Chủ đề gốc thực hiện các cuộc gọi của nó như thế nào:

function child_theme_setup() {
    add_image_size( 'name', 400, 300, true );
}
add_action( 'after_setup_theme', 'child_theme_setup', 11 );

Lưu ý rằng chúng tôi sử dụng cùng một after_setup_thememóc, nhưng sử dụng một ưu tiên thấp hơn (ví dụ 11thay vì 10Callback lửa. Theo thứ tự từ ưu tiên cao hơn (số thấp hơn) để hạ thấp ưu tiên (số cao hơn), bắt đầu với ưu tiên 0. Vì vậy, một callback nối vào ưu tiên 11sẽ cháy sau một cuộc gọi lại được ưu tiên 10.

Cũng lưu ý rằng các after_setup_thememóc tự bắn sau khi các plugins_loadedmóc, vì vậy gọi lại này vẫn sẽ ghi đè lên Theme phụ huynh, thậm chí nếu Theme mẹ là _doing_it_wrong()bằng cách không gói cuộc gọi như vậy trong một callback thích hợp, cuốn hút vào một móc thích hợp.


xuất sắc - cảm ơn chip! - Tôi có cả hai cùng một ưu tiên - ghi chú đứa trẻ trở lại sau khi cha mẹ và tất cả đều hoạt động tốt.
Q Studio

Tôi dường như không thể ghi đè lên giá trị nếu một plugin đang gọi add_image_size :(
Zhianc

1

Nếu ai đó muốn đơn giản bỏ đặt kích thước hình ảnh bổ sung, thay vì thay đổi kích thước, hãy sử dụng remove_image_size (chuỗi $ name) , ví dụ:

function pinboard_child_theme_setup( $sizes) {

    $image_size_names = array('thumbnail', 'medium', 'large',
        'slider-thumb', 'blog-thumb', 'teaser-thumb', 'gallery-1-thumb',
        'gallery-2-thumb', 'gallery-3-thumb', 'image-thumb', 'video-thumb');

    $image_size_names_length = count($image_size_names);
    for($x = 0; $x < $image_size_names_length; $x++) {
        remove_image_size($image_size_names[$x]);
    }   
}
add_action( 'after_setup_theme', 'pinboard_child_theme_setup', 11);

-1

Trong chủ đề chile của bạn, bạn sẽ cần phải sử dụng add_action( 'after_setup_theme','new-name');


tên mới ở đây là tên của chức năng hoặc tên bạn đang sử dụng cho chức năng chính của mình
robin

Thêm một lời giải thích cho câu trả lời của bạn: tại sao và làm thế nào để giải quyết vấn đề? Lưu ý rằng đó new-namelà một tên gọi lại không hợp lệ.
fuxia

"Tên mới" chỉ đơn giản là phần xử lý kích thước hình ảnh được thêm vào.
Q Studio
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.