簡體   English   中英

Wordpress中的“致命錯誤:在null上調用成員函數get_text()”

[英]“Fatal error: Call to a member function get_text() on null” in wordpress

我正在為WordPress使用插件WP-Members,我需要修改登錄表單。 將數組輸入函數后,出現以下錯誤:

“致命錯誤:在null上調用成員函數get_text()”

這是我在functions.php中的代碼

add_filter( 'wpmem_login_form', 'my_login_form_filter' );

function my_login_form_filter( $form, $action = 'login' )
 {
      /**
     * The login form is brought in with $form
     * You can append to it or filter it
     *
     * $action specifies the form being constructed. It
     * can be: login|pwdreset|pwdchange
     */

$form = array(
    array(
        'name'   => $wpmem->get_text( "login_username" ), 
        'type'   => 'text', 
        'tag'    => 'log',
        'class'  => 'username',
        'div'    => 'div_text',
    ),
    array( 
        'name'   => $wpmem->get_text( "login_password" ), 
        'type'   => 'password', 
        'tag'    => 'pwd', 
        'class'  => 'password',
        'div'    => 'div_text',
    ),
    array(
        'name'   => $wpmem->get_text( "login_number" ), 
        'type'   => 'text', 
        'tag'    => 'log', 
        'class'  => 'username',
        'div'    => 'div_text',)
);

return $form;
}

這是有問題的插件的代碼部分:

if ( ! function_exists( 'wpmem_inc_login' ) ):
            /**
             * Login Dialog.
             *
             * Loads the login form for user login.
             *
             * @since 1.8
             *
             * @global object $wpmem        The WP_Members object.
             * @global string $wpmem_regchk The WP-Members message   container.
             * @global object $post         The WordPress Post object.
             *
             * @param  string $page
             * @param  string $redirect_to
             * @return string $str         The generated html for the login form.
             */
            function wpmem_inc_login( $page = "page", $redirect_to = null, $show = 'show' ) {

                global $wpmem, $wpmem_regchk, $post;

                $str = '';

                if ( $page == "page" ) {

                     if ( $wpmem_regchk != "success" ) {

                        $dialogs = get_option( 'wpmembers_dialogs' );

                        // This shown above blocked content.
                        $msg = $wpmem->get_text( 'restricted_msg' );
                        $msg = ( $dialogs['restricted_msg'] == $msg ) ? $msg : __( stripslashes( $dialogs['restricted_msg'] ), 'wp-members' );
                        $str = "<p>$msg</p>";

                        /**
                         * Filter the post restricted message.
                         *
                         * @since 2.7.3
                         *
                         * @param string $str The post restricted message.
                         */
                        $str = apply_filters( 'wpmem_restricted_msg', $str );

                    }   
                } 

                // Create the default inputs.
                $default_inputs = array(
                    array(
                        'name'   => $wpmem->get_text( 'login_username' ), 
                        'type'   => 'text', 
                        'tag'    => 'log',
                        'class'  => 'username',
                        'div'    => 'div_text',
                    ),
                    array( 
                        'name'   => $wpmem->get_text( 'login_password' ), 
                        'type'   => 'password', 
                        'tag'    => 'pwd', 
                        'class'  => 'password',
                        'div'    => 'div_text',
                    ),
                );

                /**
                 * Filter the array of login form fields.
                 *
                 * @since 2.9.0
                 *
                 * @param array $default_inputs An array matching the                      elements used by default.
                 */
                $default_inputs = apply_filters( 'wpmem_inc_login_inputs', $default_inputs );

                $defaults = array( 
                    'heading'      => $wpmem->get_text( 'login_heading' ), 
                    'action'       => 'login', 
                    'button_text'  => $wpmem->get_text( 'login_button' ),
                    'inputs'       => $default_inputs,
                    'redirect_to'  => $redirect_to,
                );  

                /**
                 * Filter the arguments to override login form defaults.
                 *
                 * @since 2.9.0
                 *
                 * @param array $args An array of arguments to use. Default null.
                 */
                $args = apply_filters( 'wpmem_inc_login_args', '' );

                $arr  = wp_parse_args( $args, $defaults );

                $str  = ( $show == 'show' ) ? $str . wpmem_login_form( $page, $arr ) : $str;

                return $str;
            }
            endif;

似乎您正在嘗試在對象$wpmem上調用get_text()函數,但它為null

您可以嘗試添加global $wpmem; my_login_form_filter函數定義的頂部,如下所示:

<?php
add_filter( 'wpmem_login_form', 'my_login_form_filter' );

function my_login_form_filter( $form, $action = 'login' )
{
global $wpmem; // add this

$wpmem在您的函數中為null。 global $wpmem添加到您的函數中以使用全局值。

問題是您正在嘗試使用作為對象一部分的方法,但是該對象在使用它的上下文中不存在。

get_text()是WP_Members對象$wpmem$wpmem->get_text() )的方法。

這是一個全局聲明的對象,因此,只要在已定義的地方使用它,就可以通過在函數開始時聲明全局變量來訪問它:

global $wpmem;

但是,插件對此方法具有API函數,因此您可以使用直接函數而不是對象方法-這樣,已經為您聲明了對象

因此,不要使用$wpmem->get_text()使用wpmem_gettext()

另一個問題是您混淆了過濾器。 您的過濾器代碼使用wpmem_login_form 雖然這是插件中的合法過濾器掛鈎,但這並不是正確的掛鈎(甚至在您發布的函數中也沒有定義)。 您需要使用wpmem_inc_login_inputs更改輸入(在您發布的函數中查找定義位置)。 否則,您嘗試執行的操作將永遠無法進行。

應該是這樣的:

add_filter( 'wpmem_inc_login_inputs', 'my_login_form_filter' );

function my_login_form_filter() {

    $form = array(
        array(
            'name'   => wpmem_gettext( "login_username" ), 
            'type'   => 'text', 
            'tag'    => 'log',
            'class'  => 'username',
            'div'    => 'div_text',
        ),
        array( 
            'name'   => wpmem_gettext( "login_password" ), 
            'type'   => 'password', 
            'tag'    => 'pwd', 
            'class'  => 'password',
            'div'    => 'div_text',
        ),
        array(
            'name'   => "Login Number", // "login_number" does not exist in wpmem_gettext(). 
            'type'   => 'text', 
            'tag'    => 'log', 
            'class'  => 'username',
            'div'    => 'div_text',
        )
    );

    return $default_inputs;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM