web-dev-qa-db-ja.com

サイトアイコンを確認するための条件付きロジック

私が読んだもの( カスタマイザでFaviconが設定されているかどうかのチェック など)から、サイトアイコンがテーマに設定されているかどうかを確認するのは簡単なはずです。私にはうまくいかないようです。ユーザーがサイトアイコンをアップロードした場合に上書きできるように、一連の既定のサイトアイコンをテーマに設定したいと思います。私が今持っているコードは次のとおりです。

  <?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
  }
  ?>

これはうまくいっていないようです。サイトアイコンが設定されているかどうかにかかわらず、出力されません。さらに、カスタマイザセクションからアイコンを削除した後でも、(サイトとローカルキャッシュをクリアした後でも)アイコンはサイトに残ります。

私が読んだことはすべて、サイトのアイコンはテーマをサポートしなくても機能するはずであると言っていますが、それは私には機能していないようです。何か洞察や私が見逃しているかもしれない何か?

3
Andrew

site icon が設定されているかどうかをチェックする特別な関数、すなわち has_site_icon() 関数があります。

だからあなたは試すことができます:

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
    }
} 

サイトアイコンが設定されている場合は、次の方法ですでに処理されています。

add_action( 'wp_head',    'wp_site_icon',  99    );
add_action( 'login_head', 'wp_site_icon',  99    );
3
birgire

サイトのアイコンが設定されているかどうかを確認してから印刷します。

<?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
} ?>

私はこの答えを書いている瞬間にこれを使っていますが、うまくいきます。この方法であなたのオプションにサイトアイコンがあるかどうかを見るためにデバッグすることができます。このコードはとにかく何かを出力するので。

更新

@birgireによるコメントで述べたように、このコードをheader以外の場所で使用する場合、またはテーマにwp_head関数がない場合、私の答えは最適です。

もしそうなら、

デフォルトでは、wp_site_icon()関数からwp_head/login_headアクションを通じて自動的に追加されます。

2
Jack Johansson