プラグインmy-snow-monkeyでのエラー

  • このトピックには6件の返信、2人の参加者があり、最後にM Tにより1年、 7ヶ月前に更新されました。
7件の投稿を表示中 - 1 - 7件目 (全7件中)
  • 投稿者
    投稿
  • #10662
    M T
    閲覧者
    5

    <h2>【お使いの Snow Monkey のバージョン】v5.1.1</h2>

    度々の質問で恐縮です。
    function.phpから、プラグインmy-snow-monkeyに移行の際のことです。
    function.phpに多数あったコードをコピーしましたが、1つだけエラーを起こし、画面が真っ白になってしまいます。 function.phpでは正常に稼働していますが、どこが問題か、分かりましたら教えていただけますでしょうか。
    問題のコードはちょっと長いのですが以下です。
    MWフォームで、チェックボックスにチェックを入れると、必須を解除させるという内容です。

    /* MWフォーム バリデーション追加 */
    if ( ! class_exists( "MW_WP_Form_Validation_Rule_RequiredCheckbox" ) ) {
        class MW_WP_Form_Validation_Rule_RequiredCheckbox extends MW_WP_Form_Abstract_Validation_Rule {
            protected $name = 'requiredcheckbox';
    
            public function rule( $key, array $options = array() ) {
                $value = $this->Data->get( $key );
                if ( !is_null( $value ) ) {
                    $target = $this->Data->get( $options['target'] );
                    if ( empty( $value ) && MWF_Functions::is_empty( $target ) ) {
                        $defaults = array(
                            'target' => null,
                            'message' => sprintf( '未入力です。メールアドレスのない方は下欄のチェックを入れてください。', $options['target'] )
                        );
                        $options = array_merge( $defaults, $options );
                        return $options['message'];
                    }
                }
            }
    
            public function admin( $key, $value ) {
                $target = '';
                if ( is_array( $value[$this->getName()] ) && isset( $value[$this->getName()]['target'] ) ) {
                    $target = $value[$this->getName()]['target'];
                }
                ?>
                <table>
                    <tr>
                        <td>必須または選択したチェックボックス項目</td>
                        <td><input type="text" value="<?php echo esc_attr( $target ); ?>" name="<?php echo MWF_Config::NAME; ?>[validation][<?php echo $key; ?>][<?php echo esc_attr( $this->getName() ); ?>][target]" /></td>
                    </tr>
                </table>
                <?php
            }
        }
    }
    
    function mwform_validation_rule_requiredcheckbox( $validation_rules ) {
        $instance = new MW_WP_Form_Validation_Rule_RequiredCheckbox();
        $validation_rules[$instance->getName()] = $instance;
        return $validation_rules;
    }
    
    add_filter( 'mwform_validation_rules', 'mwform_validation_rule_requiredcheckbox' ); 

    エラーは以下の内容です。
    Fatal error: Class 'MW_WP_Form_Abstract_Validation_Rule' not found in /home/volunavi/stopkodokushi.info/public_html/test3/wp-content/plugins/my-snow-monkey/my-snow-monkey.php on line 494

    0
    #10669
    キタジマ タカシ
    キーマスター
    286

    テーマ(functions.php)はプラグインは完全に読み込まれたあとに実行されますが、 My Snow Monkey はプラグインなので、 My Snow Monkey が読み込まれた段階では MW WP Form が読み込まれていない可能性があります。

    全てのプラグインが読み込まれてから実行するには、 plugins_loaded にフックして処理を実行すると良いです。 mwform_validation_rules にフックさせている部分を下記のようにするとどうでしょうか?

    add_action(
        'plugins_loaded',
        function() {
            add_filter( 'mwform_validation_rules', 'mwform_validation_rule_requiredcheckbox' ); 
        }
    );
    0
    #10706
    M T
    閲覧者
    5

    ありがとうございます。
    以下の内容をご教示いただいた内容に変えてみたのですが、まだエラーが出ます。
    add_filter( 'mwform_validation_rules', 'mwform_validation_rule_requiredcheckbox' );

    ▼エラー内容です。
    Fatal error: Class 'MW_WP_Form_Abstract_Validation_Rule' not found in /home/volunavi/stopkodokushi.info/public_html/test3/wp-content/plugins/my-snow-monkey/my-snow-monkey.php on line 492

    0
    #10708
    キタジマ タカシ
    キーマスター
    286

    plugins_loaded ではなく after_setup_theme にするとどうですかね?

    0
    #10711
    M T
    閲覧者
    5

    まだエラーが出ます。エラーのsnow-monkey/my-snow-monkey.php on line 492の部分は、

    if ( ! class_exists( "MW_WP_Form_Validation_Rule_RequiredCheckbox" ) ) {
        class MW_WP_Form_Validation_Rule_RequiredCheckbox extends MW_WP_Form_Abstract_Validation_Rule {
            protected $name = 'requiredcheckbox';

    のうち、この部分です。
    class MW_WP_Form_Validation_Rule_RequiredCheckbox extends MW_WP_Form_Abstract_Validation_Rule {

    0
    #10713
    キタジマ タカシ
    キーマスター
    286

    あ、もっと広く囲わないといけなかったみたいです、すみません。

    add_action(
        'plugins_loaded',
        function() {
    
            /* MWフォーム バリデーション追加 */
            if ( ! class_exists( "MW_WP_Form_Validation_Rule_RequiredCheckbox" ) ) {
                    class MW_WP_Form_Validation_Rule_RequiredCheckbox extends MW_WP_Form_Abstract_Validation_Rule {
                            protected $name = 'requiredcheckbox';
    
                            public function rule( $key, array $options = array() ) {
                                    $value = $this->Data->get( $key );
                                    if ( !is_null( $value ) ) {
                                            $target = $this->Data->get( $options['target'] );
                                            if ( empty( $value ) && MWF_Functions::is_empty( $target ) ) {
                                                    $defaults = array(
                                                            'target' => null,
                                                            'message' => sprintf( '未入力です。メールアドレスのない方は下欄のチェックを入れてください。', $options['target'] )
                                                    );
                                                    $options = array_merge( $defaults, $options );
                                                    return $options['message'];
                                            }
                                    }
                            }
    
                            public function admin( $key, $value ) {
                                    $target = '';
                                    if ( is_array( $value[$this->getName()] ) && isset( $value[$this->getName()]['target'] ) ) {
                                            $target = $value[$this->getName()]['target'];
                                    }
                                    ?>
                                    <table>
                                            <tr>
                                                    <td>必須または選択したチェックボックス項目</td>
                                                    <td><input type="text" value="<?php echo esc_attr( $target ); ?>" name="<?php echo MWF_Config::NAME; ?>[validation][<?php echo $key; ?>][<?php echo esc_attr( $this->getName() ); ?>][target]" /></td>
                                            </tr>
                                    </table>
                                    <?php
                            }
                    }
            }
    
            function mwform_validation_rule_requiredcheckbox( $validation_rules ) {
                    $instance = new MW_WP_Form_Validation_Rule_RequiredCheckbox();
                    $validation_rules[$instance->getName()] = $instance;
                    return $validation_rules;
            }
    
            add_filter( 'mwform_validation_rules', 'mwform_validation_rule_requiredcheckbox' );
        }
    );
    0
    #10716
    M T
    閲覧者
    5

    エラーがなくなりました! 早速のご対応ありがとうございました。
    それから、MWフォームでもお世話になっております。
    トピック閉じさせていただきます。

    0
7件の投稿を表示中 - 1 - 7件目 (全7件中)
  • トピック「プラグインmy-snow-monkeyでのエラー」には新しい返信をつけることはできません。