簡體   English   中英

WP“ TypeError:黑名單未定義” password-strength-meter.js

[英]WP “TypeError: blacklist is undefined” password-strength-meter.js

我正在為我的一個WP插件創建一個自定義配置文件頁面,我希望用戶在其中擁有常規頁面,而不是看到WP Dashboard。 到目前為止,除密碼強度腳本外,其他所有方法都工作正常。 當我開始輸入密碼時,會在Firebug控制台中輸入密碼:

TypeError: blacklist is undefined
  blacklist = [ blacklist.toString() ];

在開始時調用“ meter”事件時將拋出該異常:

meter : function( password1, blacklist, password2 ) {
  if ( ! $.isArray( blacklist ) )
    blacklist = [ blacklist.toString() ];

我不知道它在WP儀表板中如何正常工作。 我花了大約一個小時的時間進行搜索,然后決定使用變通方法。 如果有人能指出我正確的方向,這就是我所缺少的,我將不勝感激。

我現在的解決方法是將其放入try / catch塊中:

meter : function( password1, blacklist, password2 ) {
  try {
        if ( ! $.isArray( blacklist ) )
            blacklist = [ blacklist.toString() ];
  }
  catch (e){}

即使在WP前端上使用它,現在也可以正常工作。 但這不是最佳解決方案,因為我必須將JS文件password-strenght-meter.js復制到我自己的插件中,然后從那里入隊。 由於我還需要使用user-profile.js,因此我也必須復制它,因此我需要復制這兩個JS文件,這不是一個好的解決方案。

有什么想法,為什么jQuery在前端頁面上使用時為什么會停止腳本,而在后台卻能正常工作呢?

====編輯=========我剛剛發現問題與另一個插件“ WP User Frontend”有關,該插件似乎用自己的代碼覆蓋了密碼強度表腳本。 所以我想我現在可以解決這個問題。

抱歉誤導性問題。 我已經檢查過此問題與激活另一個插件“ WP User Frontent”有關,該插件確實干擾了WordPress中的現有管理腳本。 所以這是我解決的方法。

首先,我將其放入自定義頁面模板中,因此需要將其放置在主題目錄中:

<?php
/**
 * Template Name: User Profile Dashboard
 */


// remove other conflicting scripts
if (class_exists('WPUF_Main'))
{
  global $wpuf;

  remove_action( 'wp_enqueue_scripts', array($wpuf, 'enqueue_scripts') );
}

get_header();

wp_enqueue_script('user-profile');
wp_enqueue_style('wp-admin');


include_once(ABSPATH . '/wp-admin/includes/template.php');

... other code that handles the user profile fields ...

<?php get_footer() ?>

棘手的部分是擺脫來自WPUF_Main類的已入隊腳本。 似乎當插件處於活動狀態時,WP User Frontend將該類實例化為全局變量$ wpuf,因此我不得不使用此變量來刪除使腳本排隊的動作。 然后,我排隊了用戶配置文件和wp-admin的腳本和樣式,並包括了wp-admin的template.php,因為我需要在此處聲明的函數commit_button()。

我希望這將對其他提出相同問題的人有所幫助,因為當網站管理員完全不希望其用戶看到WP儀表板時,結合使用WP用戶前端和具有自定義“個人資料”頁面是有道理的。

暫無
暫無

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

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