Ce înseamnă acest cod de funcție PHP?
Poate cineva să mă ajute să înțeleg fiecare parte a acestui cod? Puteți comenta fiecare linie astfel încât să pot înțelege și să personalizez codul conform nevoilor mele. Iată link-ul în pastebin:
class Towfiq_Person {
// Definirea unei clase numite Towfiq_Person
static function on_load() {
// Metodă statică care rulează la încărcarea clasei
add_action('init',array(__CLASS__,'init'));
// Adaugă acțiune pentru hook-ul 'init' care apelează metoda 'init' a clasei curente
add_action('wp_insert_post',array(__CLASS__,'wp_insert_post'),10,2);
// Adaugă acțiune pentru hook-ul 'wp_insert_post' care apelează metoda 'wp_insert_post' cu 2 parametri
add_action('profile_update',array(__CLASS__,'profile_update'),10,2);
// Adaugă acțiune pentru hook-ul 'profile_update' care apelează metoda 'profile_update' cu 2 parametri
add_action('user_register',array(__CLASS__,'profile_update'));
// Adaugă acțiune pentru hook-ul 'user_register' care apelează metoda 'profile_update'
add_filter('author_link',array(__CLASS__,'author_link'),10,2);
// Adaugă filtru pentru hook-ul 'author_link' care apelează metoda 'author_link' cu 2 parametri
add_filter('get_the_author_url',array(__CLASS__,'author_link'),10,2);
// Adaugă filtru pentru hook-ul 'get_the_author_url' care apelează metoda 'author_link' cu 2 parametri
}
Restul codului la acest link: pastebin.com/30GCNhLv
mulțumesc mult
ACTUALIZARE 1:
Am înțeles prima parte, dar ce face fiecare linie din această parte? Adică în limbaj uman:
// Metodă statică care returnează cheia de email prin aplicarea unui filtru
static function get_email_key() {
return apply_filters( 'person_email_key', '_email' );
}
// Metodă statică care actualizează profilul utilizatorului și datele persoanei asociate
static function profile_update($user_id,$old_user_data=false) {
global $wpdb;
$is_new_person = false;
// Obține datele utilizatorului
$user = get_userdata($user_id);
// Determină email-ul vechi (dacă există) sau pe cel nou
$user_email = ($old_user_data ? $old_user_data->user_email : $user->user_email);
// Obține cheia de email
$email_key = self::get_email_key();
// Caută ID-ul postării persoanei asociate acestui email
$person_id = $wpdb->get_var($wpdb->prepare("SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key='%s' AND meta_value='%s'",$email_key,$user_email));
// Dacă nu există o persoană asociată
if (!is_numeric($person_id)) {
// Creează o nouă postare de tip persoană
$person_id = $is_new_person = wp_insert_post(array(
'post_type' => 'towfiq-person',
'post_status' => 'publish', // Poate ar trebui să fie 'pending' sau 'draft'?
'post_title' => $user->display_name,
));
}
// Actualizează metadatele utilizatorului și postării
update_user_meta($user_id,'_person_id',$person_id);
update_post_meta($person_id,'_user_id',$user_id);
// Dacă e o persoană nouă sau email-ul s-a schimbat
if ($is_new_person || ($old_user_data && $user->user_email!=$old_user_data->user_email)) {
// Actualizează email-ul în metadatele postării
update_post_meta($person_id,$email_key,$user->user_email);
}
}
Practic, acesta este un model de programare pentru organizarea codului în spații de nume într-un plugin WordPress. În mod obișnuit, poți avea doar o singură funcție numită init()
într-un program, dar mai mulți autori vor încerca să folosească acest nume. Plasarea numelor de funcții într-o clasă este o soluție pentru a depăși această limitare.
De exemplu:
class Towfiq_Person {
static function on_load() { }
static function init() { }
static function profile_update() { }
}
În loc să le apelezi direct, le invoci și cu numele clasei. Deci:
Towfiq_Person::on_load();
Towfiq_Person::init();
Towfiq_Person::profile_update();
Secțiunea de cod pe care ai inclus-o în întrebarea ta este inițializatorul pentru această clasă. La sfârșitul fișierului PHP legat este Towfiq_Person::on_load()
, care îi spune WordPress să execute funcția statică on_load()
a clasei Towfiq_Person
.
Această funcție conectează diverse evenimente și filtre în WordPress. Când WordPress declanșează acțiunea sa init
, va apela și Towfiq_Person::init()
. Când WordPress inserează un articol și declanșează acțiunea sa wp_insert_post
, va apela și Towfiq_Person::wp_insert_post()
.
Fiecare linie pe care ai enumerat-o mai sus leagă o funcție specifică din clasă de un eveniment specific declanșat de WordPress.
Îți recomand să citești puțin despre Acțiuni și Filtre pentru a înțelege exact ce se întâmplă, dar acesta este un rezumat de bază.
Actualizare
Bazat pe cererea ta suplimentară pentru informații...
Nu putem defini fiecare funcție pentru tine. Ar trebui să contactezi dezvoltatorul original și să ceri documentația. Dar iată un rezumat rapid.
Funcția get_email_key()
aplică un filtru WordPress asupra șirului "_email". În esență, ia "_email" și îl trece prin orice funcție legată de acel filtru înainte de a-l returna utilizatorului. Dacă ai apela get_email_key()
acum, ți s-ar returna "_email".
Funcția profile_update()
este legată de acțiunile profile_update
și user_register
din WordPress. Când oricare dintre aceste acțiuni sunt declanșate, WordPress va apela funcția ta și va trimite ID-ul utilizatorului care este modificat și (opțional) datele care au fost modificate.
Funcția ta face apoi următoarele:
// Referință la obiectul global de bază de date pentru a putea rula interogări mai târziu
global $wpdb;
// Presupunem că aceasta este o înregistrare existentă pentru moment. Aceasta va fi actualizată în altă parte
// dacă este necesar.
$is_new_person = false;
// Obține datele pentru utilizatorul trimis de WordPress
$user = get_userdata($user_id);
// Dacă avem date vechi ale utilizatorului, obținem email-ul utilizatorului din ele. Dacă nu, obținem email-ul utilizatorului
// din obiectul $user creat mai sus.
$user_email = ($old_user_data ? $old_user_data->user_email : $user->user_email);
// Obține cheia de email. În mod obișnuit, aceasta va fi "_email"
$email_key = self::get_email_key();
// Obține ID-ul persoanei cu care lucrăm din baza de date. Căutăm
// ID-ul unui articol care are informații meta corespunzătoare cheii de email de mai sus și
// adresei de email a utilizatorului.
$person_id = $wpdb->get_var($wpdb->prepare("SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key='%s' AND meta_value='%s'",$email_key,$user_email));
// Dacă nu am găsit un ID de utilizator (ID-ul returnat este null sau "false"), atunci
// inserăm un nou tip de articol personalizat "towfiq-person" cu datele de care avem nevoie. Titlul este
// numele utilizatorului, starea este publicată, și setăm informațiile meta ale articolului pentru a putea
// să-l găsim din nou cu interogarea de mai sus.
if (!is_numeric($person_id)) {
$person_id = $is_new_person = wp_insert_post(array(
'post_type' => 'towfiq-person',
'post_status' => 'publish', // Poate ar trebui să fie pending sau draft?
'post_title' => $user->display_name,
));
}
// Actualizează informațiile meta ale utilizatorului pentru a mapa la noul tip de articol personalizat
update_user_meta($user_id,'_person_id',$person_id);
// Actualizează informațiile meta ale tipului de articol personalizat pentru a mapa la utilizator
update_post_meta($person_id,'_user_id',$user_id);
if ($is_new_person || ($old_user_data && $user->user_email!=$old_user_data- >user_email)) {
// Actualizează informațiile meta ale tipului de articol personalizat pentru a mapa la email-ul utilizatorului
update_post_meta($person_id,$email_key,$user->user_email);
}

merses, am înțeles prima parte, dar ce zici de cealaltă parte? vezi update1.

Voi documenta acel set de funcții, dar sincer nu vom face toată treaba pentru tine. Citește codul. Dacă nu înțelegi ce face, contactează dezvoltatorul original și cere documentația. Nu vom scrie codul sau documentația pentru tine.

mulțumesc foarte mult pentru eforturile tale, am înțeles. am încercat să contactez autorul acestui cod pe acest site, dar fără succes. nu contează, e deja un început. noroc

Am contactat direct autorul original al acestui cod - dacă te uiți, răspunsul original a fost trimis de Mike Schinkel. Doar caută pe Google numele său și sunt sigur că îi poți găsi informațiile de contact pentru a lua legătura în cazul în care ai nevoie de ajutor suplimentar.
