Clarification: l'image d'en-tête par défaut ne sera pas RE-affichée (en cliquant sur l'image suggérée) une fois qu'elle a été supprimée à l'aide de l'option "Masquer l'image" du personnalisateur de thème.
J'ai ajouté un support de thème pour Custom Header Image
// Add Theme Support for Custom Header Image
add_theme_support( 'custom-header',
array(
'default-image' => get_template_directory_uri() . '/assets/img/hdr_earth.jpg',
'default-text-color' => '#e2f0d6',
'header-text' => true,
'uploads' => true,
'width' => 1140,
'height' => 200,
'wp-head-callback' => 'wpfw_style_header',
)
);
Dans le personnaliseur de thème, l’image (par défaut) est affichée comme suit:
J'ai supprimé l'image d'en-tête actuelle en cliquant sur le bouton "Masquer l'image".
Et c'est là que le problème a commencé
Lorsque je tente de ré-ajouter l'image par défaut en cliquant sur l'image "suggérée" (c'est-à-dire par défaut) ...
Un var_dump( get_header_image() );
a retourné false
, donc après avoir lu la fonction dans le noyau, je vois ceci if ( 'remove-header' == $url ) return false;
.
Donc, une var_dump( get_theme_mods() )
affiche effectivement 'header_image' => string 'remove-header' (length=13)
.
???
... maintenant c'est après que j'ai ajouté l'image par défaut en arrière et enregistrée.
Qu'est-ce que je rate?
Le script entier (custom-header.php)
if ( ! function_exists( 'wpfw_custom_header' ) ) {
function wpfw_custom_header() {
// Add theme Support for Custom Backgrounds
add_theme_support( 'custom-background',
array(
'default-color' => '#e2f0d6',
'default-image' => get_template_directory_uri() . '/assets/img/bgp-128x180.jpg',
)
);
// Add Theme Support for Custom Header Image
add_theme_support( 'custom-header',
array(
'default-image' => get_template_directory_uri() . '/assets/img/hdr_earth.jpg',
'default-text-color' => '#e2f0d6',
'header-text' => true,
'uploads' => true,
'width' => 1140,
'height' => 200,
'wp-head-callback' => 'wpfw_style_header',
)
);
} // end wpfw_custom_header()
} // end if
// Hook into the 'after_setup_theme' action
add_action( 'after_setup_theme', 'wpfw_custom_header', 11 );
/**
* ----------------------------------------------
* Callback function for updating header styles
* ----------------------------------------------
*/
if ( ! function_exists( 'wpfw_style_header' ) ) {
function wpfw_style_header() {
$text_color = get_header_textcolor();
?>
<style type="text/css" id="wpfw-custom-header-styles">
.site-title a.site-title-link {
color: #<?php echo esc_attr( $text_color ); ?>;
}
<?php if ( display_header_text() != true ) : ?>
.site-title {
display: none;
}
<?php endif; ?>
</style>
<?php
} // end wpfw_style_header()
} // end if...
Vous devez enregistrer les en-têtes par défaut en utilisant register_defaults_headers
- par exemple.
register_default_headers( array(
'default-image' => array(
'url' => get_stylesheet_directory_uri() . '/assets/img/default-header.jpg',
'thumbnail_url' => get_stylesheet_directory_uri() . '/assets/img/default-header.jpg',
'description' => __( 'Default Header Image', 'textdomain' )
),
) );
Voir l'entrée du codex pour plus d'informations sur la fonction - https://codex.wordpress.org/Function_Reference/register_default_headers .
Le Codex n'est pas clair, mais cette fonction est en fait requise pour que custom_headers
fonctionne correctement.
Essayez ceci lorsque vous avez besoin d’obtenir l’URL de l’image d’en-tête et que vous avez défini la valeur par défaut:
$url = has_header_image() ? get_header_image() : get_theme_support( 'custom-header', 'default-image' );
Pour être honnête, j'ai une image d'en-tête de travail dans mon customizer en utilisant le code suivant:
Functions.php
/* custom header image */
$headerimage = array(
'default-image' => '%s/images/image1.jpg',
'width' => 1920,
'height' => 1080,
'flex-height' => false,
'flex-width' => true,
'uploads' => true,
'random-default' => false,
'header-text' => true,
'default-text-color' => '',
'wp-head-callback' => '',
'admin-head-callback' => '',
'admin-preview-callback' => '',
);
add_theme_support('custom-header', $headerimage);
Rien dans customizer.php
Où j'appelle l'en-tête-image:
<header class="site-header">
<div class="row header-home no-gutters" <?php echo 'style="background-image:url(' . get_header_image() . ');' . 'background-repeat: no-repeat;
background-position: center; background-size: cover;min-height:100vh">'; ?>
</div>
</header>
Enregistrer les images par défaut ((apparemment, c'est nécessaire, AUSSI functions.php)
register_default_headers( array(
'headerimage' => array(
'url' => '%s/images/image1.jpg',
'thumbnail_url' => '%s/images/image1.jpg',
'description' => __( 'headerimage', 'DesignitMultistore' )
),
) );
Pour les personnes ayant encore des problèmes, le code complet dont vous avez besoin est le suivant:
dans votre functions.php:
register_default_headers( array(
'default-image' => array(
'url' => get_template_directory_uri() . '/img/header.jpg',
'thumbnail_url' => get_template_directory_uri() . '/img/header.jpg',
'description' => __( 'Default Header Image', 'textdomain' )
),
) );
function yourtheme_custom_header_setup() {
$args = array(
'default-image' => get_template_directory_uri() . '/img/header.jpg',
'default-text-color' => '000',
'width' => 1200,
'height' => 720,
'flex-width' => true,
'flex-height' => true,
);
add_theme_support( 'custom-header', $args );
}
add_action( 'after_setup_theme', 'yourtheme_custom_header_setup' );
Dans votre fichier de modèle (probally header.php):
echo(has_header_image() ? get_header_image() : get_theme_support( 'custom-header', 'default-image' ));