הוספת משתמש חדש דרך functions.php

אם ננעלתם מחוץ ל-wp-admin, הגישה היחידה שלכם היא דרך FTP או מנהל הקבצים, ואין לכם אפשרות לאפס את הסיסמה דרך phpMyAdmin, תוכלו להוסיף משתמש מנהל דרך הקובץ functions.php בכמה שורות PHP.

הסניפט מראה גם כיצד username_exists(), email_exists(), wp_create_user() ו-WP_User::set_role() פועלות יחד כשאתם יוצרים משתמש בוורדפרס באמצעות קוד.

אזהרת אבטחה: השתמשו פעם אחת ומחקו

הקוד הזה שומר סיסמה כטקסט גלוי בתוך קובץ PHP. התייחסו אליו ככלי שחזור חד-פעמי, לא כקוד שנשאר בתבנית שלכם.

  • הסירו את הקוד מיד אחרי שהתחברתם פעם אחת.
  • השתמשו בסיסמה ארוכה וייחודית, ואחרי ההתחברות החליפו אותה שוב דרך משתמשים > פרופיל.
  • לעולם אל תעשו commit לקוד הזה ל-Git ואל תשאירו אותו בסביבת staging או בגיבוי של האתר.
  • אם מצאתם סניפט כזה באתר ואתם לא הוספתם אותו, התייחסו אליו כאל אתר פרוץ. קוד מוזרק שיוצר חשבונות מנהל הוא backdoor נפוץ (ראו כיצד לתקן אתר וורדפרס פרוץ).

הוספת משתמש מנהל דרך functions.php

הוסיפו את הקוד הבא לקובץ functions.php של התבנית הפעילה. אם התבנית שבורה או שאינכם בטוחים איזו תבנית פעילה, שמרו אותו כקובץ PHP (שמתחיל ב-<?php) בתיקייה wp-content/mu-plugins/, כי תוספי must-use נטענים ללא קשר לתבנית.

function sv_wp_admin_account() {
	$user  = 'Username';
	$pass  = 'Password';
	$email = '[email protected]';

	if ( ! username_exists( $user ) && ! email_exists( $email ) ) {
		$user_id = wp_create_user( $user, $pass, $email );

		if ( ! is_wp_error( $user_id ) ) {
			$user = new WP_User( $user_id );
			$user->set_role( 'administrator' );
		}
	}
}
add_action( 'init', 'sv_wp_admin_account' );

החליפו את שם המשתמש, הסיסמה והאימייל בערכים שאינם שייכים לאף משתמש קיים. לאחר מכן טענו עמוד כלשהו באתר (בצד הקדמי או במסך ההתחברות) והתחברו עם הפרטים החדשים. מחקו את הקוד מיד לאחר מכן.

כיצד זה עובד

ההוק init מופעל בכל בקשה, כך שהחשבון נוצר בטעינת העמוד הראשונה לאחר שמירת הקובץ. הבדיקות מונעות הרצה כפולה של הקוד.

  • username_exists( $username ) מחזירה את מזהה המשתמש אם שם המשתמש תפוס, או false.
  • email_exists( $email ) עושה את אותו הדבר עבור כתובת האימייל.
  • wp_create_user( $username, $password, $email ) יוצרת את המשתמש עם תפקיד ברירת המחדל של האתר ומבצעת hash לסיסמה. היא מחזירה את מזהה המשתמש החדש, או WP_Error במקרה של כישלון.
  • new WP_User( $user_id ) טוען את המשתמש, ו-set_role( 'administrator' ) מסירה את כל התפקידים הקיימים שלו ומקצה לו את התפקיד החדש.

הבדיקה is_wp_error() חשובה: ללא הבדיקה הזו, אם יצירת המשתמש תיכשל, WP_User יקבל אובייקט שגיאה במקום מזהה משתמש.

חלופה בטוחה יותר: WP-CLI

אם יש לכם גישת SSH, וותרו לגמרי על עריכת הקבצים. פקודה אחת יוצרת את משתמש המנהל, ושום דבר לא נשמר על הדיסק:

wp user create newadmin [email protected] --role=administrator

אם תשמיטו את --user_pass, WP-CLI ייצור סיסמה אקראית ויציג אותה פעם אחת בלבד. עיינו בתיעוד של wp user create לכל האפשרויות, או במדריך ל-WP-CLI אם עדיין לא השתמשתם בו.

יצירת משתמש עם כל תפקיד בקריאה אחת

בתוספים ובייבוא משתמשים, wp_insert_user() מקבלת את התפקיד ישירות, כך שאין צורך בשלב נפרד של set_role():

$user_id = wp_insert_user( array(
	'user_login' => 'editor1',
	'user_email' => '[email protected]',
	'user_pass'  => wp_generate_password( 24 ),
	'role'       => 'editor',
) );

if ( is_wp_error( $user_id ) ) {
	error_log( $user_id->get_error_message() );
}

תוכלו להשתמש במזהה (slug) של כל תפקיד רשום: administrator, editor, author, contributor, subscriber, או תפקיד מותאם אישית.

שאלות נפוצות

לפניכם כמה שאלות נפוצות על הוספת משתמשים לוורדפרס באמצעות קוד:

למה משתמש המנהל החדש לא נוצר?
בדרך כלל שם המשתמש או האימייל כבר שייכים למשתמש קיים, ולכן הבדיקה מדלגת על היצירה בשקט. ודאו גם שערכתם את functions.php של התבנית הפעילה, או השתמשו ב-mu-plugins בכדי לשלול אפשרות זו.
כיצד הופכים משתמש קיים למנהל באמצעות קוד?
טענו את המשתמש עם get_user_by( 'email', '[email protected]' ) וקראו ל-set_role( 'administrator' ) על התוצאה. אם יש לכם גישת SSH, הפקודה wp user set-role עושה את אותו הדבר בלי לגעת בקבצים.
האם בטוח להשאיר את הקוד ב-functions.php?
לא. כל מי שיכול לקרוא את הקובץ (או גיבוי שלו) מקבל סיסמת מנהל, והחשבון חוזר גם אם מישהו מוחק אותו. הסירו את הקוד מיד אחרי שהתחברתם.
האם הקוד יוצר Super Admin ב-Multisite?
לא. set_role( 'administrator' ) הופכת את המשתמש למנהל של האתר הנוכחי בלבד. גישה ברמת הרשת כולה דורשת את grant_super_admin( $user_id ).
דיון ותגובות
[  0 תגובות  ]

השאירו תגובה

הוסיפו קוד באמצעות הכפתורים מטה. למשל, בכדי להוסיף PHP לחצו על הכפתור PHP והוסיפו את הקוד בתוך השורטקוד. מצאתם שגיאה בפוסט? עדכנו אותנו...