web-dev-qa-db-ja.com

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

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

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

子テーマからこれらの定義済みサイズを上書きしたいと思います。

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

私は私が新しいサイズを加えることができることを知っている、しかし私が同じ名前を加えるならば、すなわち:

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

それから親関数呼び出しが使用されます - 子のものは無視されます - 余分な規則を追加することは決して使用されない余分な画像を追加します - それほど悪くはありませんが、効率的ではありません。

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

乾杯!

レイ

13
Q Studio

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()への呼び出しがafter親テーマの呼び出し

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

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)で起動します。

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

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

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

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

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にフックされたコールバックは起動しますafter優先度10にフックされたコールバック。

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

20
Chip Bennett

寸法を変更するのではなく、単純に追加の画像サイズを設定解除したい場合は、 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);
0
Yulia V