将简单插件转换为放在函数内部。php

时间:2012-03-29 作者:Steve

首先,我知道单独使用插件比在函数中集成插件更好。php,但这是用于将部署到多个站点的主题框架,并且将其打包为主题的一部分会更容易。

我在使用位于此处的插件中的以下代码时遇到问题。我的PHP知识有限,我曾尝试直接复制和粘贴代码,但不起作用,但作为插件使用时效果很好。

class Filosofo_Custom_Image_Sizes {

public function __construct()
{
    add_filter(\'image_downsize\', array(&$this, \'filter_image_downsize\'), 99, 3);

}

/**
 * Callback for the "image_downsize" filter.
 *
 * @param bool $ignore A value meant to discard unfiltered info returned from this filter.
 * @param int $attachment_id The ID of the attachment for which we want a certain size.
 * @param string $size_name The name of the size desired.
 */
public function filter_image_downsize($ignore = false, $attachment_id = 0, $size_name = \'thumbnail\')
{
    global $_wp_additional_image_sizes;

    $attachment_id = (int) $attachment_id;
    $size_name = trim($size_name);

    $meta = wp_get_attachment_metadata($attachment_id);

    /* the requested size does not yet exist for this attachment */
    if (
        empty( $meta[\'sizes\'] ) ||
        empty( $meta[\'sizes\'][$size_name] )
    ) {
        // let\'s first see if this is a registered size
        if ( isset( $_wp_additional_image_sizes[$size_name] ) ) {
            $height = (int) $_wp_additional_image_sizes[$size_name][\'height\'];
            $width = (int) $_wp_additional_image_sizes[$size_name][\'width\'];
            $crop = (bool) $_wp_additional_image_sizes[$size_name][\'crop\'];

        // if not, see if name is of form [width]x[height] and use that to crop
        } else if ( preg_match(\'#^(\\d+)x(\\d+)$#\', $size_name, $matches) ) {
            $height = (int) $matches[2];
            $width = (int) $matches[1];
            $crop = true;
        }

        if ( ! empty( $height ) && ! empty( $width ) ) {
            $resized_path = $this->_generate_attachment($attachment_id, $width, $height, $crop);
            $fullsize_url = wp_get_attachment_url($attachment_id);

            $file_name = basename($resized_path);

            $new_url = str_replace(basename($fullsize_url), $file_name, $fullsize_url);

            if ( ! empty( $resized_path ) ) {
                $meta[\'sizes\'][$size_name] = array(
                    \'file\' => $file_name,
                    \'width\' => $width,
                    \'height\' => $height,
                );

                wp_update_attachment_metadata($attachment_id, $meta);

                return array(
                    $new_url,
                    $width,
                    $height,
                    true
                );
            }
        }
    }

    return false;
}

/**
 * Creates a cropped version of an image for a given attachment ID.
 *
 * @param int $attachment_id The attachment for which to generate a cropped image.
 * @param int $width The width of the cropped image in pixels.
 * @param int $height The height of the cropped image in pixels.
 * @param bool $crop Whether to crop the generated image.
 * @return string The full path to the cropped image.  Empty if failed.
 */
private function _generate_attachment($attachment_id = 0, $width = 0, $height = 0, $crop = true)
{
    $attachment_id = (int) $attachment_id;
    $width = (int) $width;
    $height = (int) $height;
    $crop = (bool) $crop;

    $original_path = get_attached_file($attachment_id);

    // fix a WP bug up to 2.9.2
    if ( ! function_exists(\'wp_load_image\') ) {
        require_once ABSPATH . \'wp-admin/includes/image.php\';
    }

    $resized_path = @image_resize($original_path, $width, $height, $crop);

    if ( 
        ! is_wp_error($resized_path) && 
        ! is_array($resized_path)
    ) {
        return $resized_path;

    // perhaps this image already exists.  If so, return it.
    } else {
        $orig_info = pathinfo($original_path);
        $suffix = "{$width}x{$height}";
        $dir = $orig_info[\'dirname\'];
        $ext = $orig_info[\'extension\'];
        $name = basename($original_path, ".{$ext}"); 
        $destfilename = "{$dir}/{$name}-{$suffix}.{$ext}";
        if ( file_exists( $destfilename ) ) {
            return $destfilename;
        }
    }

    return \'\';
}
}

function initialize_custom_image_sizes()
{
new Filosofo_Custom_Image_Sizes;
}

add_action(\'plugins_loaded\', \'initialize_custom_image_sizes\');
我知道我可以使用TimThumb获得相同的结果,但我更喜欢使用WordPress的内置功能

这里有一个指向该插件的链接:-

http://wordpress.org/extend/plugins/custom-image-sizes/

提前感谢!

史蒂夫

2 个回复
最合适的回答,由SO网友:soulseekah 整理而成

add_action(\'plugins_loaded\', \'initialize_custom_image_sizes\');
plugins_loaded 在函数之前触发。包括php。将挂钩改为init.

http://codex.wordpress.org/Plugin_API/Action_Reference#Actions_Run_During_a_Typical_Request

SO网友:xaedes

如果没有插件,则永远不会触发该操作:

add_action(\'plugins_loaded\', \'initialize_custom_image_sizes\');
只需手动调用initialize_custom_image_sizes

结束

相关推荐

Communicate between plugins

我已经创建了两个WordPress插件。如果两个插件都安装了,那么这两个插件之间就可以进行一些有益的合作。那么我的问题是:让他们合作的最佳方式是什么?如何检测某个插件是否已启用?如何传输信息?我想我可以用globals,但有更好的方法吗?