質問: ### 前提・実現したいこと WordPressに管理画面「外観」の項目に「ヘッダー」を追加し、その「ヘッダー」をクリックしました。 うまくいけば、トップページにおける現在のメインイメージがプレビューされていることを確認できるはずです。 しかし、今回は以下のメッセージが出て、プレビューが確認できませんでした。 メインイメージのプレビューが表示されるように改善したいです。 ※インストールしたのはWordPress 5.1.1で、参考本は4.x。バージョンが一致していません。その場合の改善法を知りたいです。 ※imageの挿入箇所に「%s」と書きました(参考本通り)。それについて別の質問サイトで以下のようなご指摘をいただきました。 「default-imageに設定しているURLに「%s」が含まれていますが、何かに置き換えてからadd_theme_supportをコールするのではないでしょうか?」 解決法を調べている最中です。こちらについても解決したいです。 ### ヘッダーのプログラム(function.php) ``` 950, 'height'=>295, 'header-text'=>false, 'default-image'=>'%s/images/top/main_image.png', ) ); ``` ### 発生しているエラーメッセージ ``` Warning:sprintf():Too few arguments in ホームページのアドレス/wp-includes/theme.php on line 915 ``` ### 試したこと 提携しているサーバー(エックスサーバー)のFTP内で、wp-includesフォルダ > theme.php の915行目がおかしいのかと思い見てみましたが、そもそも915行もありませんでした。 ### 補足情報1(参考本など) テキスト「本格ビジネスサイトを作りながら学ぶWordPressの教科書Ver.4.x対応版」の通りにヘッダーを追加しています。(P58) 外観のテーマは、エックスサーバーのFTP内にアップロードしたのではなく、WordPress内に直接アップロードしました。 ### 補足2(別の質問サイトで回答いただいた後試したこと) wordpressの公式ページを参考に以下のように換えましたが、状況は同様(エラーメッセージ後に正しくない画面表示)でした。 ※ご指摘いただいた「%s」については現在調べている最中です。 ``` '%s/images/top/main_image.png', 'width' => 950, 'height' => 295, 'header-text' => false, ) ); add_theme_support( 'custom-header', $defaults ); ```
回答: エラーメッセージ"Warning:sprintf():Too few arguments in ホームページのアドレス/wp-includes/theme.php on line 915"は、 「ホームページのアドレス/wp-includes/theme.phpの915行目にある、sprintf()という関数の引数の数が少なすぎます」という意味です。 指摘されている個所のsprintf()という関数を使っているあたりを確認してください。 どこが問題なのか判らない場合には、sprintf()をつかっているあたりのコードを質問に追加してください。 =解説= sprintf関数は、第1引数でフォーマットを指定し、第2引数以降にはフォーマットに従って文字に変換される変数を指定します。返り値は文字列です。 ``` $num = 25; $location = '東京'; $format = '私は %d 才で %s に住んでいます'; echo sprintf($format, $num, $location); ``` フォーマット(変数:$format)の文字列の中で使われている、%d,%sは型指定子と呼ばれるもので第2引数以降をどういう型のデータとして表現するかを指定するものです。%dは10進数(普通の数字)、%sは文字列です。 上記のコードを実行すると、「私は 25 才で 東京 に住んでいます」と表示されます。 表示されたのはフォーマットの%dのところが10進数で表した $numの値に、%sのところが$locationの文字列に換わったものだというのが判ると思います。 フォーマットの中に出てくる型指定子は、その値である引数と対応していなければなりません。 ``` $num = 25; $location = '東京'; $format = '私は %d 才で %s に住んでいます'; echo sprintf($format, $num); ``` などというように、フォーマットに型指定子が2つ(%dと%s)入っているのに、値を指定している引数が1個($num)しかないといった場合に、”sprintf():Too few arguments”のエラーが出ます。