web-dev-qa-db-fra.com

Logique conditionnelle pour vérifier l'icône du site

D'après ce que j'ai lu ( Vérifier si Favicon est défini dans Customizer et autres), il apparaît que vérifier si une icône de site est définie dans un thème devrait être facile. Cela ne semble pas fonctionner pour moi. J'aimerais que l'ensemble des icônes de site par défaut définies dans mon thème puisse être écrasé 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 dit 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?

4
Andrew

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

Pour que vous puissiez 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    );
3
birgire

Vérifions si l'icône du site est définie, puis imprimons-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.

METTRE À JOUR

Comme mentionné dans le commentaire de @birgire, ma réponse convient mieux si vous utilisez 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 actions wp_head/login_head.

2
Jack Johansson