

### 前提・実現したいこと

WordPressに管理画面「外観」の項目に「ヘッダー」を追加し、その「ヘッダー」をクリックしました。  
うまくいけば、トップページにおける現在のメインイメージがプレビューされていることを確認できるはずです。

しかし、今回は以下のメッセージが出て、プレビューが確認できませんでした。

メインイメージのプレビューが表示されるように改善したいです。

※インストールしたのはWordPress 5.1.1で、参考本は4.x。バージョンが一致していません。その場合の改善法を知りたいです。

※imageの挿入箇所に「%s」と書きました（参考本通り）。それについて別の質問サイトで以下のようなご指摘をいただきました。  
「default-
imageに設定しているURLに「%s」が含まれていますが、何かに置き換えてからadd_theme_supportをコールするのではないでしょうか？」

解決法を調べている最中です。こちらについても解決したいです。

### ヘッダーのプログラム（function.php）

[code]

    <?php
    
    add_theme_support(
      'custom-header',
      array(
        'width'=>950,
        'height'=>295,
        'header-text'=>false,
        'default-image'=>'%s/images/top/main_image.png',
      )
    );
    
[/code]

### 発生しているエラーメッセージ

[code]

    Warning:sprintf():Too few arguments in ホームページのアドレス/wp-includes/theme.php on line 915
    
[/code]

### 試したこと

提携しているサーバー（エックスサーバー）のFTP内で、wp-includesフォルダ > theme.php
の915行目がおかしいのかと思い見てみましたが、そもそも915行もありませんでした。

### 補足情報1（参考本など）

テキスト「本格ビジネスサイトを作りながら学ぶWordPressの教科書Ver.4.x対応版」の通りにヘッダーを追加しています。（P58）

外観のテーマは、エックスサーバーのFTP内にアップロードしたのではなく、WordPress内に直接アップロードしました。

### 補足2（別の質問サイトで回答いただいた後試したこと）

wordpressの公式ページを参考に以下のように換えましたが、状況は同様（エラーメッセージ後に正しくない画面表示）でした。  
※ご指摘いただいた「%s」については現在調べている最中です。

[code]

    <?php
    
    //カスタムヘッダー
    add_theme_support(
      'custom-header',
      $defaults = array(
        'default-image'          => '%s/images/top/main_image.png',
        'width'                  => 950,
        'height'                 => 295,
        'header-text'            => false,
      )
    );
    add_theme_support( 'custom-header', $defaults );
[/code]


CC BY-SA 4.0
2019-04-06T00:51:58.073
53968
2019-04-07T03:00:25.093
2020-06-17T08:14:45.997
-1
32802
question
wordpress
WordPressの管理画面でヘッダーを追加→Too few argumentsのメッセージ


エラーメッセージ"Warning:sprintf():Too few arguments in ホームページのアドレス/wp-
includes/theme.php on line 915"は、  
「ホームページのアドレス/wp-
includes/theme.phpの915行目にある、sprintf()という関数の引数の数が少なすぎます」という意味です。

指摘されている個所のsprintf()という関数を使っているあたりを確認してください。

どこが問題なのか判らない場合には、sprintf()をつかっているあたりのコードを質問に追加してください。

=解説=

sprintf関数は、第１引数でフォーマットを指定し、第２引数以降にはフォーマットに従って文字に変換される変数を指定します。返り値は文字列です。

[code]

    $num = 25;
    $location = '東京';
    $format = '私は %d 才で %s に住んでいます';
    echo sprintf($format, $num, $location);
    
[/code]

フォーマット(変数:$format)の文字列の中で使われている、%d,%sは型指定子と呼ばれるもので第２引数以降をどういう型のデータとして表現するかを指定するものです。%dは１０進数(普通の数字)、%sは文字列です。

上記のコードを実行すると、「私は 25 才で 東京 に住んでいます」と表示されます。  
表示されたのはフォーマットの%dのところが１０進数で表した
$numの値に、%sのところが$locationの文字列に換わったものだというのが判ると思います。

フォーマットの中に出てくる型指定子は、その値である引数と対応していなければなりません。

[code]

    $num = 25;
    $location = '東京';
    $format = '私は %d 才で %s に住んでいます';
    echo sprintf($format, $num);
    
[/code]

などというように、フォーマットに型指定子が２つ(%dと%s)入っているのに、値を指定している引数が１個($num)しかないといった場合に、”sprintf():Too
few arguments”のエラーが出ます。


CC BY-SA 4.0
2019-04-07T03:00:25.093
53985
2019-04-07T03:00:25.093
217
53968
answer