Logique conditionnelle permettant de rechercher l'icône du site

4

D'après ce que j'ai lu ( vérifier si Favicon est défini sur Personnalisateur et autres), il semble facile de vérifier si une icône de site est définie dans un thème. Cela ne semble pas fonctionner pour moi. Je souhaite disposer dans mon thème d'un ensemble d'icônes de site par défaut pouvant être écrasées si un utilisateur télécharge une icône de site. Le code que j'ai maintenant est:

  <?php
  if( false === get_option( 'site_icon', false ) ) {
  ?>
  <link rel="apple-touch-icon" sizes="57x57" href="<?php echo get_stylesheet_directory_uri(); ?>/icons/apple-icon-57x57.png">
  <!-- MORE ICONS OUTPUT HERE -->
  <?php
  }
  ?>

Cela ne semble pas fonctionner cependant. Peu importe si une icône de site est définie ou non, elle ne sera pas sortie. De plus, même après avoir supprimé une icône de la section Customizer, elle reste sur le site (même après avoir effacé le site et le cache local).

Tout ce que j'ai lu indique que l'icône du site devrait fonctionner sans aucun support de thème, mais cela ne semble pas fonctionner pour moi. Des idées ou quelque chose me manque-t-il?

    
posée Andrew 27.06.2017 - 22:38

2 réponses

3

Il existe une fonction spéciale permettant de vérifier si l'icône du site est définie, à savoir le has_site_icon() fonction.

Vous pouvez donc essayer:

add_action( 'wp_head',    'wpse_default_site_icon', 99 );
add_action( 'login_head', 'wpse_default_site_icon', 99 );

function wpse_default_site_icon()
{
    if( ! has_site_icon()  && ! is_customize_preview() )
    {
        // your default icons here
    }
} 

Le cas où l'icône du site est définie est déjà traité par:

add_action( 'wp_head',    'wp_site_icon',  99    );
add_action( 'login_head', 'wp_site_icon',  99    );
    
réponse donnée birgire 28.06.2017 - 11:09
2

Vérifions si l'icône du site est définie, puis imprimez-la:

<?php if (get_option('site_icon')) { ?>
    <link rel="apple-touch-icon" href="<?php echo wp_get_attachment_image_url(get_option('site_icon'),'full') ?>"><?php
} else { ?>
    <link rel="apple-touch-icon" sizes="57x57" href="<?php echo get_stylesheet_directory_uri(); ?>/icons/apple-icon-57x57.png"><?php
} ?>

J'utilise ceci au moment où j'écris cette réponse, et ça marche. De cette façon, vous pouvez déboguer pour voir s’il existe ou non une icône de site dans vos options, car ce code produira quelque chose de toute façon.

UPDATE

Comme mentionné dans le commentaire de @birgire, ma réponse convient mieux si vous allez utiliser ce code ailleurs que dans l'en-tête ou si votre thème n'a pas de fonction wp_head .

Si c'est le cas, alors:

  

Il est ajouté automatiquement par défaut via la fonction wp_site_icon()   via les wp_head/login_head actions.

    
réponse donnée Jack Johansson 27.06.2017 - 23:09

Lire d'autres questions sur les étiquettes