Egyedi mezők hozzáadása a WordPress profil oldalakhoz előnézeti képe

Egyedi mezők hozzáadása a WordPress profil oldalakhoz

| Olvasási idő: 1 perc

Előfordulhat, hogy szeretnél valamilyen megjegyzést, egyéb adatot tárolni a felhasználói profilban, az előre megadott mezőkön túl. Erre egy kézenfekvő megoldás lehet az Advanced Custom Fields nevű plugin használata - de mi van akkor, ha plugin nélkül szeretnéd ezt megoldani? 

Ebben az esetben két dologról kell gondoskodnunk: 

  1. Az adatbeviteli mezők biztosításáról
  2. Az adatok mentéséről

Az alábbi snippet mindkettőt megoldja, ugorjunk is neki! Az mu-plugins mappában hozzunk létre egy fájlt (add_user_custom_fields.php), az alábbi tartalommal: 

php
<?php
/*
Plugin Name: Add custom field to user profile
Plugin URI: https://www.webmenedzser.hu
Description: Add custom field to user profile
Version: 1.0
Author: Otto Radics
Author URI: https://www.webmenedzser.hu
License: GPLv3
*/

/*
 * Add a new field (a checkbox in this case) to the user profile page
 */
function show_user_flagged_info( $user ) { ?>
    <table class="form-table">
        <tr>
            <th>
                <label for="user_is_flagged_for_being_nasty">User is flagged for being nasty</label>
            </th>

            <td>
                <input
                    type="checkbox"
                    name="user_is_flagged_for_being_nasty"
                    id="user_is_flagged_for_being_nasty"
                    <?php if (get_user_meta($user->ID, 'user_is_flagged_for_being_nasty', true))  { ?>
                        checked="checked"
                    <?php } ?>
                />

                <label class="description" for="user_is_flagged_for_being_nasty">Check the box if you want to flag the user.</label>
            </td>
        </tr>
    </table>
<?php }
add_action( 'show_user_profile', 'show_user_flagged_info' );
add_action( 'edit_user_profile', 'show_user_flagged_info' );

/*
 * Save the data in the DB
 */
function save_user_flagged_info( $user_id ) {
    if ( !current_user_can( 'edit_user', $user_id ) ) {
        return false;
    }

    // Copy-paste this if you want to save multiple data in the DB
    update_user_meta( $user_id, 'user_is_flagged_for_being_nasty', $_POST['user_is_flagged_for_being_nasty'] );
}
add_action( 'personal_options_update', 'save_user_flagged_info' );
add_action( 'edit_user_profile_update', 'save_user_flagged_info' );

Két függvényt látunk a fenti kódban: 

  • Az első (show_user_flagged_info()) gondoskodik arról, hogy a felhasználói profil oldalon megjelenjen a mező (méghozzá abban a struktúrában, amit a HTML részben leírunk). Fontos: ha nem szeretnénk, hogy a felhasználó a saját profiljában lássa ezeket a mezőket, akkor az add_action( 'show_user_profile', 'show_user_flagged_info' ); sort töröljük!
  • A második (save_user_flagged_info($user_id)) elvégzi a szükséges adatbázisműveletet, vagyis frissíti a felhasználó metaadatát. A fenti megjegyzés itt is aktuális: ha nem szeretnénk, hogy a felhasználó ezt az adatot frissíthesse, akkor töröljük az add_action( 'personal_options_update', 'save_user_flagged_info' ); sort. 

Mentést követően navigáljunk el a saját vagy egy felhasználónk profil oldalára: ha minden igaz, akkor a mező meg fog jelenni, és ha bepipáljuk, akkor az adatábázisban létre is jön a bejegyzés a felhasználóhoz. 

Készen is vagyunk! A fenti snippetet is felhasználva készítettük ezt a plugint, amivel felhasználó szinten szűrni tudod az utánvétes rendelés elérhetőségét.