add_image_sizeを削除または更新します


16

私はいくつかの画像サイズが正しく定義されているテーマに取り組んでいます:

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

子テーマからこれらの定義されたサイズをオーバーライドしたい:

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

私は新しいサイズを追加できることを知っていますが、同じ名前を追加すると:

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

次に、親関数呼び出しが使用されます-子関数呼び出しは無視されます-余分なルールを追加すると、使用されない余分な画像が追加されます-それほど悪くはありませんが、効率的ではありません。

追加した画像サイズを登録解除する機能はありますか?

乾杯!

レイ


関連するコード全体を投稿してください。add_image_size()呼び出しは裸で座っているだけですfunctions.phpか、それともコールバック内に適切にラップされ、フックされていafter_setup_themeますか?質問に答えるためにどれが重要かを知る。
チップベネット

こんにちはチップ-あなたのコメントをありがとう-あなたは正しいですafter_setup_themeに包まれている-これは再び優先順位についてです-私はいつもそれを見逃しています!
Qスタジオ

回答:


22

このadd_image_size( $name, $width, $height, $crop )関数は、同じを使用して複数の呼び出しを処理するのに十分なほど優雅$nameです。既存の値を単に上書きします

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

だから、すべてはあなたがカスタム画像サイズの親テーマの定義をオーバーライドするために必要なことを意味していることと、そのに保証することにあるとお電話add_image_size()火災をした後、親テーマのコール

親テーマがそのようにすると仮定します:

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' );

次に、親テーマのadd_image_size()呼び出しがafter_setup_themeデフォルトの優先度(つまり10)でフックで起動します。

(注:コールがコールバックにラップされていない場合、plugins_loadedフックで優先的に起動します10。)

重要な部分は次のとおりです。子テーマのfunctions.phpファイルは親テーマのに解析されるため、同じフックを使用してadd_image_size()呼び出しを起動すると、親テーマのadd_image_size()呼び出しによってオーバーライドされます。

解決策は、後のフックまたはより低い優先度を使用して、子テーマのadd_image_size()呼び出しが親テーマの呼び出しのに実行されるようにすることです。

これは、親テーマが呼び出しを起動する方法に関係なく、トリックを実行する必要があります。

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

注我々は、同じ使用することをafter_setup_themeフックしますが、使用して優先度の低い(すなわち11代わりの10優先順位で始まる)優先順位(高い数値を下げるために)優先度の高い(数字が小さいものから順に。コールバックの火を0。優先順位にフックコールバックは非常に11発生します priorityにフックされたコールバック10

また、after_setup_themeフック自体がフックのに起動するplugins_loadedため、親のテーマが_doing_it_wrong()適切なコールバックでそのような呼び出しをラップせず、適切なフックにフックされている場合でも、このコールバックは親テーマをオーバーライドします。


すばらしい-ありがとうチップ!-私は両方を同じ優先順位で持っていました-親の後ろに子供を刻み込み、すべてうまくいきました。
Qスタジオ

プラグインがadd_image_sizeを呼び出している場合、値を上書きできないようです:(
Zhianc

1

寸法を変更するのではなく、単に追加の画像サイズを設定解除したい場合は、remove_image_size(string $ name)を使用します。例えば

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

あなたのチリのテーマでは、使用する必要があります add_action( 'after_setup_theme','new-name');


ここでの新しい名前は、関数の名前、またはメイン関数に使用している名前です
ロビン

答えに説明を追加します。問題を解決する理由と方法は?注new-name無効なコールバックの名前です。
FUXIA

「新しい名前」は、追加される画像サイズのハンドルです。
Qスタジオ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.