回答編集履歴

1 追記修正

CHERRY

CHERRY score 13671

2019/05/08 17:06  投稿

なにをしようとしているのか把握できていませんが、コードを眺めて、いくつか気になった点を指摘しておきます。
----
>    add_shortcode('file_include','print_number');
>    add_shortcode('file_include', 'space_article');
質問に記載されているコードでは、同じ名前のショートコードを `add_shortcode()` している部分が2つありますが、同じショートコード名で、別の処理を定義しているのでしょうか?
[add_shortcode](https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/add_shortcode) に
> 各ショートコードには、ひとつだけフックを定義することができます。そのため、他のプラグインが同じショートコードを持っていると、他のプラグインによってフックが上書きされるか、または他のプラグインのフックを上書きしてしまいます。どちらになるかは、プラグインの読み込み順または実行の順番に左右されます。
と記載されている通り、1つの WordPress 上では、WordPress core やプラグインやテーマで、同じショートコードの名前に2つ(以上)の内容を定義することはできません。
----
>   function print_number($atts){
>       (略)
>       return array($title,$number,$category);
>   }
>   add_shortcode('file_include','print_number');
(変数が未定義なので、`Notice: Undefined variable ... ` がでるという問題は置いておいて... )
ショートコードの結果を配列で返していますが、WordPress が期待する `do_shortcode` を実行した返り値は、コンテンツのショートコードを実行した結果に置き換えた結果の「`文字列`」です。
つまり、
質問のコードだと下記のような配列を変数に代入する
```
function arr(){
   return array(1, 2, 3);
}
$a = '';
$a = arr();
echo $a;    // 'Array'が表示される
```
の様な処理になるので、配列で返された場合は、文字列 `Array` が返されて、`Notice: Array to string conversion in ...` のメッセージが出力されるような気がします。(未確認)
----
`add_shortcode()` は、ショートコードの内容を定義するだけですので、 `do_shortcode()` が実行されない限りショートコードは、実行された結果を返しませんが、どこで実行されていますか?
通常のテーマで、 `do_shortcode()` を記載していない状態でも本文に記載したショートコードが実行されるのは、本文を表示する処理である `the_content()` の中で、the_content フックを利用して、`do_shortcode()` が、呼び出されて実行されているので、本文表示時にショートコードは、実行結果に置き換えて表示されます。( [do_shortcode](https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/do_shortcode) 参照 )

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る