Edited at

functions.phpに記述したショートコードを記事内に埋め込むと、記事よりも前に出力される件

More than 3 years have passed since last update.


あらまし

記事内に記述したショートコード[pripara]を仕込むと、

wp_contentが読まれる直前に出力されてしまう問題が発生した。


function shortcode_pripara($atts) {
echo "サイリウムチェンジ!ぷりっ<br>";
return;
}
add_shortcode('pripara', 'shortcode_pripara');


2015-02-03追記

特に凝った事をしていなければ、returnで返せばOK。そうすべき。

function shortcode_pripara($atts) {

return "サイリウムチェンジ!ぷりっ<br>";
}
add_shortcode('pripara', 'shortcode_pripara');

しかし、出力が存在する外部のphpファイルを

(仕方なく)読み込まなくてはならない場合、wp_contentの直前に出力される。


function shortcode_require_pri_ticket($atts) {
require_once(dirname(__FILE__) . '/ticket/chanko.php');
return;
}
add_shortcode('require_pri_ticket', 'shortcode_require_pri_ticket');


どうしたか

phpの標準出力のバッファを利用する。


function shortcode_require_pri_ticket($atts) {
ob_start();

require_once(dirname(__FILE__) . '/ticket/chanko.php');

$output_string = ob_get_contents();
ob_end_clean();
return $output_string;
}
add_shortcode('require_pri_ticket', 'shortcode_require_pri_ticket');


参考

[resolved] Plugin called via shortcode appears at the wrong place on post

https://wordpress.org/support/topic/plugin-called-via-shortcode-appears-at-the-wrong-place-on-post?replies=5