# Testreszabás kódrészletekkel

> Kurzusszintek átnevezése és bővítése, oktatók automatikus jóváhagyása és egyedi mező a regisztrációs űrlapon.

Ez a fejezet kész kódrészleteket tartalmaz a gyakori testreszabásokhoz. A kódot a **gyermektéma** `functions.php` fájljába vagy egy kódbeszúró bővítménybe másold, ne közvetlenül a téma fájljaiba, mert a téma frissítésekor a módosításaid elvesznének.

## Kurzusszintek átnevezése és bővítése

A kurzusok szintjei alapból a **Kezdő**, **Középhaladó** és **Haladó** (kulcsaik: `beginner`, `intermediate`, `expert`). A `tutor_course_level` szűrővel átnevezheted vagy bővítheted őket.

Átnevezés: a kulcsok maradnak, a megjelenő név változik.

```php
add_filter( 'tutor_course_level', 'modify_course_level' );
if ( ! function_exists( 'modify_course_level' ) ) {
	function modify_course_level( $levels ) {
		$levels['beginner']     = 'Újonc';
		$levels['intermediate'] = 'Gyakorlott';
		$levels['expert']       = 'Profi';
		return $levels;
	}
}
```

Új szintek felvétele a meglévő három mellé:

```php
add_filter( 'tutor_course_level', 'add_extra_course_level' );
if ( ! function_exists( 'add_extra_course_level' ) ) {
	function add_extra_course_level( $levels ) {
		$levels['extra-level-1'] = 'Mester';
		$levels['extra-level-2'] = 'Mindenkinek';
		return $levels;
	}
}
```

## Oktatók automatikus jóváhagyása

Alapból az oktatói regisztráció után az új oktató „függőben” állapotú, és egy adminisztrátornak kell jóváhagynia. Ha azt szeretnéd, hogy a regisztráló oktató azonnal jóváhagyott legyen, használd ezt a kódot:

```php
add_action( 'tutor_new_instructor_after', 'approve_new_instructor_immediately' );
if ( ! function_exists( 'approve_new_instructor_immediately' ) ) {
	function approve_new_instructor_immediately( $instructor_id ) {
		update_user_meta( $instructor_id, '_tutor_instructor_status', 'approved' );
		update_user_meta( $instructor_id, '_tutor_instructor_approved', tutor_time() );
		$instructor = new \WP_User( $instructor_id );
		$instructor->add_role( tutor()->instructor_role );
	}
}
```

Ezzel gyakorlatilag bárki regisztrálhat oktatónak és beküldhet kurzust, ezért csak akkor használd, ha ezt tudatosan vállalod.

## Egyedi mező a regisztrációs űrlapon

A regisztrációs űrlapot a téma sablonjainak felülírásával bővítheted. Előbb hozz létre gyermektémát, vagy mentsd el biztonságos helyre a téma fájljait. A Tutor LMS sablonjait a témádban a `tutor` mappa alá másolva írhatod felül: a regisztrációs űrlap sablonja a `sajattema/tutor/dashboard/registration.php`.

### Példa: kötelező telefonszám

A telefonszám mezőnek két lépése van.

**1. Kötelezővé tétel és mentés.** Másold a gyermektéma `functions.php` fájljába:

```php
add_filter( 'tutor_student_registration_required_fields', 'required_phone_no_callback' );
if ( ! function_exists( 'required_phone_no_callback' ) ) {
	function required_phone_no_callback( $atts ) {
		$atts['phone_no'] = 'A telefonszám megadása kötelező';
		return $atts;
	}
}
add_action( 'user_register', 'add_phone_after_user_register' );
add_action( 'profile_update', 'add_phone_after_user_register' );
if ( ! function_exists( 'add_phone_after_user_register' ) ) {
	function add_phone_after_user_register( $user_id ) {
		if ( ! empty( $_POST['phone_no'] ) ) {
			$phone_number = sanitize_text_field( $_POST['phone_no'] );
			update_user_meta( $user_id, 'phone_number', $phone_number );
		}
	}
}
```

A kód kötelezővé teszi a mezőt, és a regisztrációkor a felhasználó metaadatai közé menti a számot.

**2. A mező az űrlapon.** Illeszd be ezt a HTML-részletet a témádban felülírt `tutor/dashboard/registration.php` fájlba, az űrlap többi mezője mellé:

```php
<div class="tutor-form-row">
	<div class="tutor-form-col-12">
		<div class="tutor-form-group">
			<label><?php _e( 'Telefonszám', 'tutor' ); ?></label>
			<input type="text" name="phone_no" value="<?php echo tutor_utils()->input_old( 'phone_no' ); ?>" placeholder="<?php _e( 'Telefonszám', 'tutor' ); ?>">
		</div>
	</div>
</div>
```

A mező fordítható, és hibás kitöltés után a korábban beírt értéket visszaírja. Ezután a regisztrációs űrlapon megjelenik a telefonszám mező, és nélküle nem lehet regisztrálni.

### Teljesen új mező (például azonosító)

Ugyanezzel a módszerrel bármilyen más mezőt felvehetsz. A példában egy kötelező **NID** (személyi azonosító) mező szerepel. Öt lépés kell hozzá.

1. **Kötelezővé tétel és mentés** a `functions.php`-ban. A kulcs most `nid`, a metaadat neve `_nid`:

   ```php
   add_filter( 'tutor_student_registration_required_fields', 'required_nid_no_callback' );
   if ( ! function_exists( 'required_nid_no_callback' ) ) {
   	function required_nid_no_callback( $atts ) {
   		$atts['nid'] = 'Azonosító';
   		return $atts;
   	}
   }
   add_action( 'user_register', 'add_nid_after_user_register' );
   add_action( 'profile_update', 'add_nid_after_user_register' );
   if ( ! function_exists( 'add_nid_after_user_register' ) ) {
   	function add_nid_after_user_register( $user_id ) {
   		if ( ! empty( $_POST['nid'] ) ) {
   			$nid = sanitize_text_field( $_POST['nid'] );
   			update_user_meta( $user_id, '_nid', $nid );
   		}
   	}
   }
   ```

2. **A mező az űrlapon:** a felülírt `tutor/dashboard/registration.php` fájlba:

   ```php
   <div class="tutor-form-col-6">
   	<div class="tutor-form-group">
   		<label><?php _e( 'Azonosító', 'tutor' ); ?></label>
   		<input type="text" name="nid" value="<?php echo tutor_utils()->input_old( 'nid' ); ?>" placeholder="<?php _e( 'Azonosító', 'tutor' ); ?>">
   	</div>
   </div>
   ```

3. **Az érték beolvasása a profiloldalon.** A felülírt `tutor/dashboard/my-profile.php` fájl elején, a többi változó mellé vedd fel:

   ```php
   $nid = get_user_meta( $uid, '_nid', true );
   ```

4. **Az érték kiírása a profiloldalon.** Ugyanebbe a fájlba, a többi profilelem mellé:

   ```php
   <div class="tutor-dashboard-profile-item">
   	<div class="heading">
   		<span><?php _e( 'Azonosító', 'tutor' ); ?></span>
   	</div>
   	<div class="content">
   		<p><?php echo $nid ? $nid : '________'; ?></p>
   	</div>
   </div>
   ```

   Ha a felhasználó megadott értéket, azt látja, különben aláhúzásvonalak jelennek meg.

5. **Szerkesztőmező a beállításokban**, hogy a már regisztrált felhasználók is megadhassák az értéket: a vezérlőpult **Beállítások → Profil** oldalának sablonjába (a felülírt `tutor/dashboard/settings/profile.php`) illeszd be:

   ```php
   <div class="tutor-form-col-6">
   	<div class="tutor-form-group">
   		<label><?php _e( 'Azonosító', 'tutor' ); ?></label>
   		<input type="number" min="1" name="nid" value="<?php echo get_user_meta( $user->ID, '_nid', true ); ?>" placeholder="<?php _e( 'Azonosító', 'tutor' ); ?>">
   	</div>
   </div>
   ```

Ezzel az új mező megjelenik a regisztrációs űrlapon és a profil beállításai között, és kiíródik a vezérlőpult profiloldalán. A példa szám típusú mezőt használ, így csak számértéket fogad el. Ha szöveget is el kell fogadnia, cseréld az ötödik lépés `type="number"` mezőjét `type="text"`-re.
