web-dev-qa-db-fra.com

Les images d'en-tête personnalisées n'apparaissent pas lorsqu'elles sont définies sur aléatoire

J'utilise un thème personnalisé, développé à partir de Boilerplate (il y a quelque temps). J'ai remarqué que les images d'en-tête fonctionnent correctement lorsqu'elles sont définies de manière statique, mais ne s'affichent pas lorsqu'elles sont définies de manière aléatoire. J'ai essayé de changer de thème et je me suis rendu compte que le même problème se produisait avec Boilerplate, ainsi que Twentytwelve. Vingtaine travaillait bien, alors j'ai copié son code sur mon thème, et ENCORE ça ne marche pas!

Mon functions.php contient:

    // The custom header business starts here.

$custom_header_support = array(
    // The default image to use.
    // The %s is a placeholder for the theme template directory URI.
    'default-image' => '%s/images/headers/starkers.png',
    // The height and width of our custom header.
    'width' => 760,
    'height' => 280,
    // Don't support text inside the header image.
    'header-text' => false,
    // Callback for styling the header preview in the admin.
    'admin-head-callback' => '',
);

add_theme_support( 'custom-header', $custom_header_support );

if ( ! function_exists( 'get_custom_header' ) ) {
    // This is all for compatibility with versions of WordPress prior to 3.4.
    define( 'HEADER_TEXTCOLOR', '' );
    define( 'NO_HEADER_TEXT', true );
    define( 'HEADER_IMAGE', $custom_header_support['default-image'] );
    define( 'HEADER_IMAGE_WIDTH', $custom_header_support['width'] );
    define( 'HEADER_IMAGE_HEIGHT', $custom_header_support['height'] );
    add_custom_image_header( '', $custom_header_support['admin-head-callback'] );
    add_custom_background();
}

// We'll be using post thumbnails for custom header images on posts and pages.
// We want them to be 940 pixels wide by 198 pixels tall.
// Larger images will be auto-cropped to fit, smaller ones will be ignored. See header.php.
set_post_thumbnail_size( $custom_header_support['width'], $custom_header_support['height'], true );

// ... and thus ends the custom header business.


// Default custom headers packaged with the theme. %s is a placeholder for the theme template directory URI.
register_default_headers( array(
    'berries' => array(
        'url' => '%s/images/headers/starkers.png',
        'thumbnail_url' => '%s/images/headers/starkers-thumbnail.png',
        /* translators: header image description */
        'description' => __( 'Boilerplate', 'boilerplate' )
    )
) );
}
endif;

Fondamentalement, copié textuellement.

Et mon header.php:

<?php
    // The header image
    // Check if this is a post or page, if it has a thumbnail, and if it's a big one
    if ( is_singular() &&
            has_post_thumbnail( $post->ID ) &&
            ( /* $src, $width, $height */ $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), array( HEADER_IMAGE_WIDTH, HEADER_IMAGE_WIDTH ) ) ) &&
            $image[1] >= HEADER_IMAGE_WIDTH ) :
        // Houston, we have a new header image!
        echo get_the_post_thumbnail( $post->ID, 'post-thumbnail' );
    elseif (get_header_image()) : ?>
    <img src="<?php header_image(); ?>" width="<?php echo HEADER_IMAGE_WIDTH; ?>" height="<?php echo HEADER_IMAGE_HEIGHT; ?>" alt="" />
<?php endif; // end check for featured image or standard header 
?>

Je suis tout à fait hors de mon esprit avec cela maintenant - est-ce que quelque chose me manque, peut-être? Ou un conflit que je n'ai pas remarqué?

2

Vérifié le code et il semble que la fonctionnalité d'image d'en-tête aléatoire se produise à l'intérieur de get_header_image(). Le problème pourrait donc être l'un des suivants:

  1. Votre elseif n'est jamais exécuté. En d'autres termes, la condition if est toujours évaluée à true et get_the_post_thumbnail() se charge de générer l'image.
  2. Votre thème ne prend pas en charge activé pour l'en-tête personnalisé , default-image ou les deux.

Pour un moyen rapide de diagnostiquer exactement ce qui se passe, je mettrais des messages de débogage partout dans votre header.php pour voir ce qui se passe.

Voici le code source de get_header_image() pour référence.

function get_header_image() {
    $url = get_theme_mod( 'header_image', get_theme_support( 'custom-header', 'default-image' ) );

    if ( 'remove-header' == $url )
        return false;

    if ( is_random_header_image() )
        $url = get_random_header_image();

    return esc_url_raw( set_url_scheme( $url ) );
}

Edit: vient de trouver quelque chose. Essayez d’ajouter default-image param à votre tableau pour l’appel add_theme_support, comme suit:

$custom_header_support = array(
    // The default image to use.
    // The %s is a placeholder for the theme template directory URI.
    'default-image' => '%s/images/headers/starkers.png',
    // The height and width of our custom header.
    'width' => 760,
    'height' => 280,
    // Don't support text inside the header image.
    'header-text' => false,
    // Callback for styling the header preview in the admin.
    'admin-head-callback' => '',
    'random-default' => true
);

Remarque: Ce lien était extrêmement utile pour comprendre le paramètre responsable de l'activation d'images aléatoires dans les thèmes. .

1
montrealist

Si vous utilisez le plugin Post Types Order :
Nous avons eu le même problème et nous l'avons résolu en désactivant la fonction de tri automatique de ce plugin.

1
Stefan Bergfeldt