个性化阅读
专注于IT技术分析

WordPress WP_Customize_Image_Control()无法使用icon(.ico)文件

我在主题定制器中添加了一个图片控件来更改收藏夹图标。问题是我无法上传.ico文件。它可以与其他文件格式(.jpg, .png)配合使用。现在, 我正在使用WP_Customize_Upload_Control()更改收藏夹图标。我想知道有什么方法可以使用WP_Customize_Image_Control()上传.ico文件。在Codex中没有此类的文档。

提前致谢


#1


我的解决方案是扩展WP_Customize_Image_Control类以能够接受.ico文件。为此, 请使用以下代码创建一个名为” customize-favicon.php”的新文件:

<?php
class SO_Customize_Favicon_Control extends WP_Customize_Image_Control {
    public function __construct( $manager, $id, $args ) {

        $this->extensions[] = 'ico';

        return parent::__construct( $manager, $id, $args );
    }
}
?>

然后, 在你的custom_register回调函数中, 在新文件中添加一个include, 并将标准图像控件类替换为刚创建的类:

include 'customize-favicon.php';
$wp_manager->add_control( new Custom_Customize_Favicon_Control( $wp_manager, 'favicon_image', array(
    'label'   => 'Favicon Image (16x16 px or 32x32 px)', 'section' => 'some_global_section', 'settings'   => 'favicon_image', 'priority' => 1, ) ) );

#2


我必须使用几个过滤器来允许WP Media Library中的.ico MIME类型。然后, 我为Favicon上传创建了一个自定义设置处理程序和控件。

在媒体库中允许.ico

add_filter( 'getimagesize_mimes_to_exts', array($this, 'add_ico_mime'), 99999 );
add_filter( 'upload_mimes', array($this, 'add_ico_ext'), 99999 );

/*Add Ico Mime Type to Allowed Extension*/
public function add_ico_mime( $mime ) {
    $mime[ 'image/vnd.microsoft.icon' ] = "ico";
    $mime[ 'image/x-icon' ]             = "ico";
    $mime[ 'image/ico' ]                = "ico";
    return $mime;
}

/*Add Ico File Extension to Allowed Mimes*/
public function add_ico_ext( $site_mimes ) {
    if (isset($site_mimes['ico']) === false) $site_mimes['ico'] = 'image/vnd.microsoft.icon';
    return $site_mimes;
}

设置处理程序

/*Setup WP Customizer Options*/
public $transport = 'refresh'; // 'PostMessage';
public $option_type = 'theme_mod';

/*Handle Uploader Settings*/
public function add_favicon_control($setting_id, $section_id, $label = '', $priority = 0) {
    global $wp_customize, $theme_namespace;

    $setting_args = array(
    'type'              => $this->option_type, 'capability'        => 'edit_theme_options', 'transport'         => $this->transport, 'sanitize_callback' => 'esc_url_raw', );

    $wp_customize->add_setting( $setting_id, $setting_args );
    $favicon_control = new Favicon_Control( $wp_customize, $setting_id, array(
    'label'         => __( $label, $theme_namespace ), 'section'       => "ds_theme_{$section_id}_section_id", 'priority'      => $priority, 'settings'      => $setting_id, 'context'      => 'favicon'
    ) );
    $wp_customize->add_control( $favicon_control );
    return $favicon_control;
}

声明自定义图标控件

/*Custom Favicon Control Class    */
class Favicon_Control 
extends WP_Customize_Image_Control {
        public $setting_id;

        public function __construct( $manager, $id, $args = array() ) {
            $this->extensions[] = 'ico';
            $this->setting_id = $id;
            parent::__construct( $manager, $id, $args );
        }

        public function tab_uploaded() {
            $my_context_uploads = get_posts( array(
            'post_type'  => 'attachment', 'meta_key'   => '_wp_attachment_context', 'meta_value' => $this->context, 'orderby'    => 'post_date', 'nopaging'   => true, ) );
        ?>

        <div class="uploaded-target"></div>

        <?php
            if ( empty( $my_context_uploads ) )
                return;
        ?>
        <div class="uploaded-favicons" data-controller="<?php esc_attr_e( $this->setting_id ); ?>">
            <?php
                foreach ( (array) $my_context_uploads as $my_context_upload ) {
                    $this->print_tab_image( esc_url_raw( $my_context_upload->guid ) );
                }
            ?>
        </div>
        <?php
        }
    }

最后, 初始化处理程序

/*Initialize Favicon Handler*/
$this->add_favicon_control($setting_id, $section_id, $label, 80);
赞(0)
未经允许不得转载:srcmini » WordPress WP_Customize_Image_Control()无法使用icon(.ico)文件

评论 抢沙发

评论前必须登录!