Php &引用;致命错误:调用成员函数get_text()on null;在wordpress中

Php &引用;致命错误:调用成员函数get_text()on null;在wordpress中,php,wordpress,Php,Wordpress,我正在使用WordPress的插件WP成员,我需要修改登录表单。将数组输入函数后,出现以下错误: “致命错误:在null上调用成员函数get_text()” 这是我在functions.php中的代码 add_filter( 'wpmem_login_form', 'my_login_form_filter' ); function my_login_form_filter( $form, $action = 'login' ) { /** * The login fo

我正在使用WordPress的插件WP成员,我需要修改登录表单。将数组输入函数后,出现以下错误:

“致命错误:在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;
如果(!function_存在('wpmem_inc_login')):
/**
*登录对话框。
*
*加载用于用户登录的登录表单。
*
*@自1.8
*
*@global object$wpmem WP_Members对象。
*@global string$wpmem_regchk WP Members消息容器。
*@global object$post WordPress post对象。
*
*@param string$page
*@param string$重定向到
*@return string$str为登录表单生成的html。
*/
函数wpmem_inc_login($page=“page”,$redirect_to=null,$show='show'){
全球$wpmem,$wpmem_regchk,$post;
$str='';
如果($page==“page”){
如果($wpmem_regchk!=“成功”){
$dialogs=get_选项('wpmembers_dialogs');
//上面显示了阻止的内容。
$msg=$wpmem->get_text('restricted_msg');
$msg=($dialogs['restricted\u msg']==$msg)?$msg:(stripslashes($dialogs['restricted\u msg']),'wp members');
$str=“$msg

”; /** *过滤限制发布的消息。 * *@自2.7.3起 * *@param string$str发布受限消息。 */ $str=应用过滤器('wpmem\u restricted\u msg',$str); } } //创建默认输入。 $default_inputs=数组( 排列( 'name'=>$wpmem->get_text('login_username'), '类型'=>'文本', '标记'=>'日志', “类”=>“用户名”, 'div'=>'div_text', ), 数组( 'name'=>$wpmem->get_text('login_password'), '键入'=>'密码', “标记”=>“pwd”, “类”=>“密码”, 'div'=>'div_text', ), ); /** *筛选登录表单字段的数组。 * *@自2.9.0以来 * *@param array$default\输入一个与默认使用的元素匹配的数组。 */ $default_inputs=应用_过滤器('wpmem_inc_login_inputs',$default_inputs); $defaults=数组( 'heading'=>$wpmem->get_text('login_heading'), '操作'=>'登录', 'button_text'=>$wpmem->get_text('login_button'), “输入”=>$default\u输入, '重定向到'=>$redirect\u到, ); /** *筛选参数以覆盖登录表单默认值。 * *@自2.9.0以来 * *@param array$args要使用的参数数组。默认为null。 */ $args=apply_filters('wpmem_inc_login_args',''; $arr=wp\u parse\u args($args,$defaults); $str=($show='show')?$str.wpmem\u登录表单($page,$arr):$str; 返回$str; } endif;
似乎您正试图调用对象
$wpmem
上的函数
get_text()
,但它是
null

您可以尝试添加
global$wpmem
在您的
my\u login\u form\u filter
函数定义之上,如下所示:

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

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

$wpmem
在函数中为空。将
global$wpmem
添加到函数中以使用全局值。

问题在于,您试图使用的方法是对象的一部分,但对象在使用它的上下文中不存在

get_text()
是WP_成员对象的方法
$wpmem
$wpmem->get_text()

它是一个全局声明的对象,因此只要您在已定义的位置使用它,就可以通过在函数开头声明全局来访问它:

global$wpmem

但是,插件有一个直接的函数,因此您可以使用直接函数而不是对象方法-这样,对象就已经为您声明了

因此,使用
wpmem\u gettext()
而不是
wpmem\u gettext()

另一个问题是你把过滤器弄混了。您的筛选代码正在使用
wpmem\u登录\u表单
。虽然这是插件中一个合法的过滤器钩子,但它不是正确的钩子(甚至没有在您发布的函数中定义)。您需要使用
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;
}

这意味着您正在调用的函数没有从您正在使用的表单中获取值。尝试查看表单输入名称现在已经没有了,但是现在我只得到了“Array”,没有更多了。您期望什么?你回来了