※ ChatGPTを利用し、要約された質問です(原文:Wordpressでプラグイン内自作関数の有効範囲)
WordPressでプラグイン内自作関数の有効範囲
このQ&Aのポイント
WordPressでプラグイン内の自作関数が呼び出せる有効範囲について調べています。プラグイン内で作成した関数をsingle.phpなどで呼び出すと正常に表示されますが、header.phpやfooter.phpなどではエラーが発生します。
サンプルのソースコードを使用してプラグインを作成しており、クラス内のメソッドを指定した場所では関数が呼び出せます。しかし、header.phpやfooter.phpなどではエラーが発生する理由がわかりません。
ShowTextクラス内で定義されたget_textメソッドによってテキストを表示することができます。プラグインの設定ページにおいて、テキストを設定することができ、header.phpなどでこのメソッドを呼び出すこともできますが、エラーが発生します。なぜでしょうか?
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;
?>
よろしくおねがいいたします。