[英]Fatal error: Uncaught Error: Call to a member function insert() on null in wordpress
[英]“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.