4

私は wordpress ウィジェットの開発が初めてで、外出先でtutsplus の動画から学習しています。Web サイト用の単純なウィジェットを作成しようとしています。これまでのところ、ビデオのすべての手順に従っていますが、次のエラーが発生し、フォームが値を保存していません。

Warning: extract() expects parameter 1 to be array, null given in C:\Program Files\Ampps\www\test\wp-content\plugins\first\index.php on line 50

これがfromメソッドです

public function form($instance){ 
extract($instance);
?>
        <p>
            <lable for="<?php echo $this->get_field_id('ap_title_text');?>">Title Text: </lable>
            <input type="text" class="widefat" id="<?php echo $this->get_field_id('ap_title_text');?>"  name="<?php echo $this->get_field_name('ap_title_text');?>" value="<?php if(isset($ap_title_text)) echo esc_attr($ap_title_text);?>" />
        </p>

<?php

ここまでで、コンストラクターを作成してウィジェットを登録しました。ビデオのこのステップまで、エラーは表示されませんでした。そして、この問題について私がグーグルで検索したすべての Web サイトで、同様の手順が示されました。システムでエラーが表示される理由がわかりません。
昨日ダウンロードしたwordpress 3.5.2とphp5.3を使用しています。

編集:: これがコードです。

class SidebarWidget extends WP_Widget{

    function __construct()
    {
        $options = array(
        'description'   =>  'Simplest way to start working from any page',
        'name'          =>  'Sidebar Widget'
        );
        parent::__construct('appSidebarWidget', '', $options);
    }

    public function form($instance)
    {   
        extract($instance);
        ?>
        <p>
            <label for="<?php echo $this->get_field_id('ap_title_text'); ?>" >Title Text: </lable>
            <input type="text" class="widefat" id="<?php echo $this->get_field_id('ap_title_text');?>"  name="<?php echo $this->get_field_name('ap_title_text');?>" value="<?php if(isset($ap_title_text)) echo esc_attr($ap_title_text);?>" />
        </p>

        <p>
            <label for="<?php echo $this->get_field_id('ap_app_name'); ?>" >app Name: </lable>
            <input type="text" class="widefat" id="<?php echo $this->get_field_id('ap_app_name');?>"    name="<?php echo $this->get_field_name('ap_app_name');?>"   value="<?php if(isset($ap_app_name)) echo esc_attr($ap_app_name);?>" />
        </p>

        <?php
    }

    public function widget($args, $instance)
    {

        extract($args);
        extract($instance);
        $display_gadget = "<iframe src='http://$appURL' width='150px' height='200px' scrolling='auto' frameborder='0' allowtransparency='true'></iframe>";

        if(empty($ap_title_text)){$ap_title_text = "Schedule Now";}
        echo $before_widget;
            echo $before_title.$ap_title_text.$after_title;
            echo $display_gadget;
        echo $after_widget;
    }

}

add_action('widgets_init','appRegisterWidget');
function appRegisterWidget()
{
    register_widget('appSidebarWidget');
}

私はまだそれを機能させることができませんでした。しかし、私がこれを学んでいた実際のプロジェクトは、期待どおりに機能します。私はまだこれのどこが悪いのか知りたいです。そのせいで職を失いそうになりました。

また、表示されているウィジェットのボタンからカスタム JavaScript 関数を呼び出す方法を教えてもらえますか。基本的に私の目的は、フォーム上の情報によってレンダリングされたウィジェットにボタンを表示することです。誰かがボタンをクリックすると、メッセージ付きのオーバーレイが表示されます。

4

4 に答える 4

0

form() 関数は WP_Widgets オブジェクトによって呼び出されています。

于 2014-07-09T06:46:45.590 に答える
0

$instance変数が配列ではないため、コードがクラッシュしています。関数は、そのextract()仕事をするために配列を受け取る必要があります。それは明確で非常に単純です。

問題は、関数$instanceを呼び出すコードを提供しない限り、 null の理由を説明できる人がいないことです。が配列でないform()理由は無数にあります。$instance

于 2013-07-17T21:01:55.813 に答える
0

$instance空の更新関数がある場合、フォーム メソッドで常に null になることもあります。これはこの質問とは関係ないかもしれませんが、同様の問題が発生した場合は、それが問題かどうかを確認してください。

于 2016-07-24T17:37:28.427 に答える