删除图像大小&在子主题funcions.php中添加图像大小无法正常工作

时间:2016-11-24 15:49:42

标签: php wordpress parent-child child-process

任何人都可以帮助解决以下问题吗?

我正在尝试更改子主题中主题生成的自定义缩略图大小之一,我已将以下内容添加到子主题中的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 个答案:

答案 0 :(得分:1)

第1步:在父级后加载新尺寸

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

调用add_image_size()时,它所做的就是获取参数并将其存储到名为$_wp_additional_image_sizes的全局中,该名称由您提供的名称键入。如果你有密钥,你可以覆盖参数(请记住以后这一点。)

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

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

第2步:您无需将其删除

您无需删除图像尺寸。相反,只需运行add_image_size就可以了。

为什么呢?请记住,我在上面说过,当运行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'。检查您要调用的代码以显示帖子缩略图。确保指定尺寸。
  2. CSS覆盖了大小。在Chrome或Firefox中打开开发人员工具,检查图片的网址是否附加了-242x242.jpg后缀。
  3. WordPress如何呈现图像

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

    您可以通过在Chrome或Firefox中打开开发者工具来查看此内容。检查浏览器中是否有正确的图像文件,这意味着它上面有-242x242.jpg后缀。