Php &引用;致命错误:调用成员函数get_text()on null;在wordpress中
我正在使用WordPress的插件WP成员,我需要修改登录表单。将数组输入函数后,出现以下错误: “致命错误:在null上调用成员函数get_text()” 这是我在functions.php中的代码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
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”,没有更多了。您期望什么?你回来了