删除图像大小并在子主题中添加图像大小 funcions.php 无效

remove image size & add image size in child theme funcions.php not working

有人可以帮忙解决以下问题吗?

我正在尝试更改子主题中某个主题生成的自定义缩略图大小之一,我已将以下内容添加到子主题中的 functions.php:

add_theme_support( 'post-thumbnails' );
    remove_image_size( 'sela-grid-thumbnail' );
    add_image_size( 'sela-grid-thumbnail', 242, 242, true );

paren 主题的原始函数是:

add_theme_support( 'post-thumbnails' );

// Post thumbnails
set_post_thumbnail_size( 820, 312, true );
// Hero Image on the front page template
add_image_size( 'sela-hero-thumbnail', 1180, 610, true );
// Full width and grid page template
add_image_size( 'sela-page-thumbnail', 1180, 435, true );
// Grid child page thumbnail
add_image_size( 'sela-grid-thumbnail', 360, 242, true );
// Testimonial thumbnail
add_image_size( 'sela-testimonial-thumbnail', 90, 90, true );

但是我的 'sela-grid-thumbnail' 图片仍然以父主题 functions.php 的原始尺寸显示 - 谁能告诉我为什么?我错过了什么吗?谢谢

第 1 步:在父项之后加载您的新尺寸

您需要确保在 父项声明后 重新定义图像大小。那是什么意思?

当调用 add_image_size() 时,它所做的只是获取参数并将其存储到一个名为 $_wp_additional_image_sizes 的全局变量中,该变量由您为其指定的名称作为键值。如果你有密钥,你可以覆盖参数(记住这个以备后用)。

让我们来看看加载顺序。 WordPress 加载插件,然后是子主题,然后是父主题。考虑一下。您想要更改父级正在创建的默认图像大小。正确的?这意味着:父主题需要先 运行 才能尝试更改它。

检查您的子主题并确保在父主题添加之后重新定义图像大小。

第 2 步:您不需要删除它

您不需要删除图像尺寸。相反,只是 运行 和 add_image_size 一样。

为什么?记得我在上面说过,当 运行ning add_image_size 时,WordPress 会覆盖按您调用的图像大小的名称存储的内容。当您在子主题中调用它时,它将覆盖存储在全局 $_wp_additional_image_sizes.

中的父主题。

为了帮助您形象化,这是来自 WordPress 核心的代码:

function add_image_size( $name, $width = 0, $height = 0, $crop = false ) {
    global $_wp_additional_image_sizes;

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

如果名称已经存在,您是否看到它是如何覆盖的?否则,它会将其添加为新尺寸。

您什么时候想使用 remove_image_size() 删除图像尺寸?

在不重新定义大小时执行此操作。你只想完全删除它。

第 3 步:需要重新生成现有图像

添加新图像尺寸时,媒体库和 wp-content/uploads 中的现有图像不会自动生成新尺寸。添加的所有新图像都将以新尺寸存储。

这是什么意思?

声明新图像尺寸后,所有新图像都将与每个声明的尺寸一起存储在 uploads 文件夹中。打开文件夹看看。您将看到原始图像文件,然后是附加文件,每个文件的尺寸都附加了后缀。 WordPress 负责调整大小,然后将每个图像大小存储到 Uploads 文件夹中。

如何重新生成现有图像

好的,如何重新生成所有现有图像以获得新尺寸?我使用 Viper 的 Regenerate Thumbnails plugin。它将 运行 遍历所有图像,然后创建新尺寸。

如何验证新尺寸

如何验证您的新尺码是否已注册?

注册存储在全局变量 $_wp_additional_image_sizes 中,并以您给它的名称作为键控,即 'sela-grid-thumbnail'。要查看是否已注册,您可以这样做:

add_action('loop_start', 'check_if_image_size_is_registered');
/**
 * Check if the image size has been registered when the
 * Loop first starts.
 *
 * @since 1.0.0
 *
 * @return void
 */
function check_if_image_size_is_registered() {
    global $_wp_additional_image_sizes;

    if ( ! isset( $_wp_additional_image_sizes['sela-grid-thumbnail'] ) ){
        die('nope, not registered');
    }

    echo '<pre>';
    var_dump( $_wp_additional_image_sizes['sela-grid-thumbnail'] );
    echo '</pre>';

    die('yes, it is registered');
}

如果已注册,则会将尺寸回显给浏览器。您可以检查这些以确保它们是您想要的尺寸,即 242 x 242。

是否回显了 242 x 242 大小?

  • 如果是,那么您的图像尺寸已注册并且您注册正确。
  • 如果没有,那么你需要回去检查你做的顺序add_image_size()

注册了,但是图片没有格式化怎么办?

您在上面检查过,图像尺寸已正确注册。但是,如果您在浏览器中看到的图像大小不是 242x242,您会怎么做?

那是另一个问题。可能是:

  1. 渲染到浏览器时未指定图像大小。例如,假设您正在使用 the_post_thumbnail()。第一个参数是大小,即 'sela-grid-thumbnail'。检查您调用以呈现 post 缩略图的代码。确保指定大小。
  2. CSS 覆盖大小。在 Chrome 或 Firefox 中打开开发人员工具,检查图像的 URL 是否附加了 -242x242.jpg 后缀。

WordPress 如何呈现图像

当您渲染图像并将其设置为 'sela-grid-thumbnail' 大小时,WordPress 会从 uploads 文件夹中抓取适当的文件。假设图像是 my-cool-background.jpg。 WordPress 会抓住 my-cool-background-242x242.jpg.

您可以通过在 Chrome 或 Firefox 中打开开发人员工具来检查这一点。检查浏览器中是否存在正确的图像文件,这意味着它具有 -242x242.jpg 后缀。