Wordpressでプラグイン内自作関数の有効範囲
Wordpressでプラグインの作り方を勉強しています。
http://tachibanacw.mond.jp/techwiki/index.php?WordPress%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3%BA%EE%C0%AE
このページの中段以降にあるclass ShowTextを作ってみているのですが、このページこう書いてあります。
※ ただし、footer.phpやheader.php、sidebar.phpでは呼び出し方法(1)は使えない!!!
この通りプラグイン内で作った関数を呼び出す
<?php echo esc_html($showtext->get_text()); ?> をsingle.phpへ書き込むと正常に表示されますが
header.phpやfooter.phpなどでは
Call to a member function get_text() on a non-object in C:\xampp\htdocs\~
というエラーが出ます。(ローカルでテストしています)
↑のページには理由が書いてないのですが、これはなぜなのですか?
サンプルのソースは以下です。
<?php
/*
Plugin Name: Show Text
Plugin URI: http://localhost/wordpress/plugin
Description: テキストを表示するだけのプラグイン
Author: A.Hiruta
Version: 0.1
Author URI: http://localhost/wordpress
*/
class ShowText {
//「 __construct」はインスタンス化するときに実行されるメソッド
function __construct(){
//クラス内のメソッドを指定する場合は第2引数は$thisを含めた配列になる
add_action('admin_menu', array($this, 'add_pages'));
}
function add_pages(){
add_menu_page('テキスト設定','テキスト設定', 'level_8', __FILE__, array($this, 'show_text_option_page'), '', 26);
}
function show_text_option_page() {
//$_POST['showtext_options'])があったら保存
if ( isset($_POST['showtext_options'])) {
check_admin_referer('shoptions');
$opt = $_POST['showtext_options'];
update_option('showtext_options', $opt);
?><div class="updated fade"><p><strong><?php _e('Options saved.'); ?></strong></p></div><?php
}
?>
<div class="wrap">
<div id="icon-options-general" class="icon32"><br /></div><h2>テキスト設定</h2>
<form action="" method="post">
<?php
wp_nonce_field('shoptions');
$opt = get_option('showtext_options');
$show_text = isset($opt['text']) ? $opt['text']: null;
?>
<table class="form-table">
<tr valign="top">
<th scope="row"><label for="inputtext">テキスト</label></th>
<td><input name="showtext_options[text]" type="text" id="inputtext" value="<?php echo $show_text ?>" class="regular-text" /></td>
</tr>
</table>
<p class="submit"><input type="submit" name="Submit" class="button-primary" value="変更を保存" /></p>
</form>
<!-- /.wrap --></div>
<?php
}
//何故かfooter.phpにはecho esc_html($showtext->get_text());を記述してもダメだった。
function get_text() {
$opt = get_option('showtext_options');
return isset($opt['text']) ? $opt['text']: 'null desu.';
}
}
//クラスを記述して、その場でインスタンス化(実行)
$showtext = new ShowText;
?>
よろしくおねがいいたします。
お礼
できました!!!返事遅れましてすみません。 感謝!