我知道这很旧,但我一直在寻找这个问题的答案,这样我就可以保存缩略图,而不是将全尺寸图像用于日志,但我无法保存。我已经通过执行以下操作来满足我的需要:
选择图像时,我将其挂接到customize_sanitize_{$this->id} 滤器这为我提供了一个过滤器中的图像url,以执行我想要的操作。
最初我使用attachment_url_to_postid
更改过滤器回调中的值,然后从函数返回新的图像url,然后将其存储在标准url的位置。然而,事实证明,用以前的任何选择(在WP_Customize_Upload_Control
类WP_Customize_Image_Control
继承自)使用相同的函数获取附件ID,并最终呈现当前选择。当传递给它的URL是缩略图时,这会中断,我将数据库值更改为缩略图。
实际上,我所做的是将值保存为wp_option
在过滤器回调中,只需通过函数发送标准值,以免在发生时破坏它:
functions.php
function site_logo_save( $value ) {
$id = attachment_url_to_postid($value);
$thumb = wp_get_attachment_image_src( $id );
$url = $thumb[0];
update_option(\'site_logo\', $url);
return $value;
}
add_action(\'customize_sanitize_site_logo\', \'site_logo_save\');
然后在我的主题文件中,而不是使用
get_theme_mod
, 我刚用过
get_option
要检索url,请执行以下操作:
header.php
<div class="site-branding">
<?php if($site_logo = get_option(\'site_logo\')): ?>
<img src="<?php echo get_option(\'site_logo\'); ?>" class="site-logo" alt="<?php bloginfo( \'name\' ); ?>">
<?php else: ?>
<h1 class="site-title"><a href="<?php echo esc_url( home_url( \'/\' ) ); ?>" rel="home"><?php bloginfo( \'name\' ); ?></a></h1>
<h2 class="site-description"><?php bloginfo( \'description\' ); ?></h2>
<?php endif; ?>
</div><!-- .site-branding -->
<?php
// Add this if we are in the customizer for reseting when no image selected
global $wp_customize;
if ( isset( $wp_customize ) ) : ?>
<div style="display: none;">
<div class="site-branding-no-logo">
<h1 class="site-title"><a href="<?php echo esc_url( home_url( \'/\' ) ); ?>" rel="home"><?php bloginfo( \'name\' ); ?></a></h1>
<h2 class="site-description"><?php bloginfo( \'description\' ); ?></h2>
</div>
</div>
<?php endif; ?>
另外,因为我想使用
\'transport\' => \'postMessage\'
对于我的设置,我需要进行一次管理ajax调用,以获取图像缩略图,无论何时更改此自定义程序选项,我都将使用该缩略图,以反映此实时:
customizer.js
wp.customize( \'site_logo\', function( value ) {
value.bind( function( to ) {
if (to == false) {
var orig = $( \'.site-branding-no-logo\' ).html();
$( \'.site-branding\' ).html( orig );
} else {
var data = {
action: \'get_actual_site_logo_url\'
};
$.post(ajaxurl, data, function(response) {
var $img = $(\'<img>\').attr(\'src\', response);
$( \'.site-branding\' ).html( $img );
});
}
} );
} );
functions.php
function get_actual_site_logo_url_callback() {
echo get_option(\'site_logo\');
wp_die();
}
add_action( \'wp_ajax_get_actual_site_logo_url\', \'get_actual_site_logo_url_callback\' );
公平地说,为了获得我想要的功能,我不得不一路走下去,但它似乎工作得很好!