Cosa significa questo codice PHP? Spiegazione dettagliata delle funzioni
Qualcuno può aiutarmi a capire ogni parte di questo codice? Potete commentare ogni riga così posso capire e personalizzare il codice secondo le mie esigenze. Ecco il link su pastebin:
class Towfiq_Person {
static function on_load() {
// Aggiunge azioni e filtri quando la classe viene caricata
add_action('init',array(__CLASS__,'init')); // Esegue 'init' quando WordPress si inizializza
add_action('wp_insert_post',array(__CLASS__,'wp_insert_post'),10,2); // Scatta quando un post viene inserito
add_action('profile_update',array(__CLASS__,'profile_update'),10,2); // Scatta quando un profilo utente viene aggiornato
add_action('user_register',array(__CLASS__,'profile_update')); // Scatta quando un nuovo utente viene registrato
add_filter('author_link',array(__CLASS__,'author_link'),10,2); // Filtra il link dell'autore
add_filter('get_the_author_url',array(__CLASS__,'author_link'),10,2); // Filtra l'URL dell'autore
}
Il resto del codice a questo link: pastebin.com/30GCNhLv
Grazie mille
AGGIORNAMENTO 1:
Ho capito la prima parte, ma cosa fa esattamente questa parte? Cosa fa ogni riga in linguaggio semplice?
// Restituisce la chiave email filtrata
static function get_email_key() {
return apply_filters('person_email_key', '_email'); // Permette di modificare la chiave email tramite filtro
}
// Gestisce l'aggiornamento del profilo utente
static function profile_update($user_id, $old_user_data=false) {
global $wpdb;
$is_new_person = false;
$user = get_userdata($user_id); // Ottiene i dati dell'utente
$user_email = ($old_user_data ? $old_user_data->user_email : $user->user_email); // Prende la vecchia o nuova email
$email_key = self::get_email_key(); // Ottiene la chiave email
// Cerca il post associato a questa 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));
// Se non esiste un post associato, ne crea uno nuovo
if (!is_numeric($person_id)) {
$person_id = $is_new_person = wp_insert_post(array(
'post_type' => 'towfiq-person', // Tipo di post personalizzato
'post_status' => 'publish', // Forse dovrebbe essere 'pending' o 'draft'?
'post_title' => $user->display_name, // Titolo del post = nome visualizzato
));
}
// Aggiorna i metadati
update_user_meta($user_id, '_person_id', $person_id); // Associa ID utente a ID post
update_post_meta($person_id, '_user_id', $user_id); // Associa ID post a ID utente
// Se è un nuovo utente o l'email è cambiata, aggiorna l'email nel post
if ($is_new_person || ($old_user_data && $user->user_email!=$old_user_data->user_email)) {
update_post_meta($person_id, $email_key, $user->user_email);
}
}
Sostanzialmente, questo è un pattern di programmazione per l'organizzazione del codice in namespace all'interno di un plugin WordPress. Tipicamente, puoi avere solo una funzione chiamata init()
in un programma, ma più autori proveranno a utilizzare quel nome. Inserire i nomi delle funzioni in una classe è un modo per aggirare questa limitazione.
Ad esempio:
class Towfiq_Person {
static function on_load() { }
static function init() { }
static function profile_update() { }
}
Invece di chiamarle direttamente, le invochi anche con il nome della classe. Quindi:
Towfiq_Person::on_load();
Towfiq_Person::init();
Towfiq_Person::profile_update();
La sezione di codice che hai incluso nella tua domanda è il bootstrapper per questa classe. Alla fine del file PHP linkato c'è Towfiq_Person::on_load()
, che dice a WordPress di eseguire la funzione statica on_load()
della classe Towfiq_Person
.
Questa funzione collega vari eventi e filtri all'interno di WordPress. Quando WordPress attiva la sua azione init
, chiamerà anche Towfiq_Person::init()
. Quando WordPress inserisce un post e attiva la sua azione wp_insert_post
, chiamerà anche Towfiq_Person::wp_insert_post()
.
Ogni riga che hai elencato sopra associa una specifica funzione nella classe a un evento specifico attivato da WordPress.
Ti consiglio di leggere un po' su Azioni e Filtri per capire esattamente cosa succede, ma questa è una panoramica di base.
Aggiornamento
In base alla tua ulteriore richiesta di informazioni...
Non possiamo definire ogni funzione per te. Dovresti davvero contattare lo sviluppatore originale e chiedere la documentazione. Ma ecco una rapida panoramica.
La funzione get_email_key()
applica un filtro WordPress alla stringa "_email". In sostanza, prende "_email" e la passa attraverso qualsiasi funzione collegata a quel filtro prima di restituirla all'utente. Se chiamassi get_email_key()
ora, ti verrebbe restituito "_email".
La funzione profile_update()
è collegata alle azioni profile_update
e user_register
in WordPress. Quando una di queste azioni viene attivata, WordPress chiamerà la tua funzione e passerà l'ID dell'utente che viene modificato e (opzionalmente) i dati che sono stati modificati.
La tua funzione fa quindi quanto segue:
// Riferimento all'oggetto database globale per eseguire query più tardi
global $wpdb;
// Assumiamo per ora che si tratti di un record esistente. Questo verrà aggiornato altrove
// se necessario.
$is_new_person = false;
// Ottieni i dati per l'utente passato da WordPress
$user = get_userdata($user_id);
// Se abbiamo vecchi dati utente, otteniamo l'email dell'utente da essi. Altrimenti, otteniamo l'email dell'utente
// dall'oggetto $user creato sopra.
$user_email = ($old_user_data ? $old_user_data->user_email : $user->user_email);
// Ottieni la chiave email. Tipicamente sarà "_email"
$email_key = self::get_email_key();
// Ottieni l'ID della persona su cui stiamo lavorando dal database. Stiamo cercando
// l'ID di un post che ha meta informazioni corrispondenti alla chiave email di cui sopra e
// all'indirizzo email dell'utente.
$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));
// Se non abbiamo trovato un ID utente (l'ID restituito è nullo o "false"), allora
// inseriamo un nuovo post type personalizzato "towfiq-person" con i dati che ci servono. Il titolo è
// il nome dell'utente, lo stato è pubblicato e impostiamo meta informazioni del post per poterlo
// trovare di nuovo con la query precedente.
if (!is_numeric($person_id)) {
$person_id = $is_new_person = wp_insert_post(array(
'post_type' => 'towfiq-person',
'post_status' => 'publish', // Forse dovrebbe essere pending o draft?
'post_title' => $user->display_name,
));
}
// Aggiorna le meta informazioni dell'utente per mappare al nuovo post type personalizzato
update_user_meta($user_id,'_person_id',$person_id);
// Aggiorna le meta informazioni del post type personalizzato per mappare all'utente
update_post_meta($person_id,'_user_id',$user_id);
if ($is_new_person || ($old_user_data && $user->user_email!=$old_user_data- >user_email)) {
// Aggiorna le meta informazioni del post type personalizzato per mappare all'email dell'utente
update_post_meta($person_id,$email_key,$user->user_email);
}

grazie, ho capito la prima parte ma per quanto riguarda l'altra parte vedi update1.

Documenterò quel set di funzioni, ma onestamente non faremo tutto il lavoro al posto tuo. Leggi il codice. Se non capisci cosa fa, contatta lo sviluppatore originale e chiedi la documentazione. Non scriveremo il codice o la documentazione per te.

grazie mille per i tuoi sforzi, ho capito. ho provato a contattare l'autore di questo codice su questo sito ma senza successo. non importa, è già un inizio. salute

Ho contattato direttamente l'autore originale di questo codice - se guardi, la risposta originale è stata inviata da Mike Schinkel. Basta cercare su Google il suo nome e sono sicuro che puoi trovare le sue informazioni di contatto per metterti in contatto se hai bisogno di ulteriore aiuto.
