覆盖主题定义的Add_Image_Size

时间:2015-06-03 作者:Lion

我买了一个WP主题,它在他的主题函数中定义了自定义图像大小。php如下所示:

if ( function_exists( \'add_image_size\' ) ){
    add_image_size( \'tie-small\', 70, 70, true );
}
如您所见,第三个参数为true,这将导致硬裁剪模式(请参见Wordpress Documentation for add_image_size). 这个模式没有考虑比例,所以我的一些缩略图的大小调整得非常糟糕。我做了一些测试,将裁剪参数更改为FALSE将产生更好的结果。

我想通过使用插件覆盖此图像大小,这样我就可以更新我的主题,而不会在每次更新时将上面的值更改为FALSE。add\\u image\\u size函数将其数据存储在以$name为键的数组中。因此,此函数的多重调用将覆盖上一次调用之前的值。

我的插件非常简单,如下所示:

class My_Plugin {
    public function __construct() {
        add_action( \'after_setup_theme\', array( $this, \'overwrite_wptheme_settings\' ) );
    }

    public function overwrite_wptheme_settings() {
        add_image_size( \'tie-small\', 70, 70, false );
    }
}
它不起作用,我重新复制了一张测试图像,看起来crop设置为true。我不明白为什么,因为值被覆盖了!我可以通过主题函数中的函数tie\\u last\\u帖子来验证这一点。主题的php。此函数用于生成具有后期缩略图图像的小部件:

[...]
function tie_last_posts($numberOfPosts = 5 , $thumb = true) {
    // [...]
    <?php global $_wp_additional_image_sizes; 
          var_dump($_wp_additional_image_sizes);
    ?>
    <?php the_post_thumbnail( \'tie-small\' ) ; ?>
这将在小部件之前输出以下内容:

array(3) {
  ["tie-small"]=>
  array(3) {
    ["width"]=>
    int(70)
    ["height"]=>
    int(70)
    ["crop"]=>
    bool(false)
  }
  ["tie-large"]=>
  array(3) {
    ["width"]=>
    int(300)
    ["height"]=>
    int(160)
    ["crop"]=>
    bool(true)
  }
  ["slider"]=>
  array(3) {
    ["width"]=>
    int(620)
    ["height"]=>
    int(330)
    ["crop"]=>
    bool(true)
  }
}
如您所见,属性crop 在索引中设置为falsetie-small. 所以它被我的插件覆盖了。但是缩略图会被裁剪。我用一个测试图像验证了这一点,当它被wordpress裁剪时,它显然变得很糟糕。我总是在文章中重复这张图片。我已经验证了覆盖本身是否有效:我插入了add\\u image\\u size(\'tie small\',70,70,false);在主题功能结束时。php和它的工作,但在我的插件它不是。这里怎么了?

2 个回复
SO网友:Benito Lopez

将操作更改为“init”:

class My_Plugin {
    public function __construct() {
        add_action( \'init\', array( $this, \'overwrite_wptheme_settings\' ) );
    }

    public function overwrite_wptheme_settings() {
        add_image_size( \'tie-small\', 70, 70, false );
    }
}

SO网友:Lion

通过创建子主题解决了此问题。在行动中after_setup_theme 我覆盖了图像的大小,效果很好,缩略图不再被裁剪。不知道为什么在插件中不可能做到这一点,但对我来说,创建一个childtheme而不是插件似乎是更好的解决方案。WP文档本身表示,这是修改主题的推荐方式,因此我将把插件所做的更改移动到我创建的子主题。

结束

相关推荐

Plugins_url()错误地返回wp-Include目录

我怀疑它有问题plugins_url() 但我看到的是一些奇怪的行为。我在激活的插件中有以下内容function include_masonry() { wp_enqueue_script( \'masonry\', plugins_url(\'js/masonry.min.js\', __FILE__), array(), \'3.2.1\', true ); wp_enqueue_script( \'my_init_script\', plugins_url(\'js/my_i