Ciao @Towfiq :
I commenti sono correlati nel database ai messaggi. Dovrai fare molto lavoro per ottenere commenti che riguardino gli utenti.
Hai preso in considerazione la creazione di un tipo di post personalizzato per gli utenti e quindi utilizzare un user_meta
campo per memorizzare il post_id
o un postmeta
campo per memorizzare il user_id
o entrambi? Se lo facessi, otterrai i commenti senza alcuno sforzo.
AGGIORNARE
Quello che segue è il codice sviluppato dopo la nostra discussione nei commenti.
Ho intenzione di scrivere qualcosa del genere per molto tempo, ma la tua ricerca di domande mi ha fatto diventare una priorità. Ho creato un 'towfiq-person'
tipo di post personalizzato per te e l'ho impostato per aggiungere automaticamente un post Person ogni volta che viene aggiunto un utente e utilizza l'indirizzo e-mail come chiave di associazione in un campo personalizzato post chiamato '_email'
.
Associa inoltre un Utente con un indirizzo e-mail appropriato al post Persona se un Utente viene aggiunto o aggiornato con la stessa e-mail di una Persona esistente (questa potrebbe essere o non essere una buona idea.) E fa riferimento incrociato Utente con Persona e Persona con utente che utilizza i campi postmeta e usermeta '_user_id'
e '_person_id'
, rispettivamente.
Queste sono ovviamente regole commerciali che ho scelto di implementare, ma potrebbero non essere appropriate per il tuo caso d'uso, nel qual caso potresti doverle modificare. Puoi anche trovare modi in cui WordPress consente a questi due di non essere sincronizzati, ma è difficile saperlo senza test esaustivi. Se trovi problemi, puoi sempre cercare di aggiornare la logica per risolverli.
Puoi copiare il seguente codice nel functions.php
file del tuo tema :
class Towfiq_Person {
static function on_load() {
add_action('init',array(__CLASS__,'init'));
add_action('wp_insert_post',array(__CLASS__,'wp_insert_post'),10,2);
add_action('profile_update',array(__CLASS__,'profile_update'),10,2);
add_action('user_register',array(__CLASS__,'profile_update'));
add_filter('author_link',array(__CLASS__,'author_link'),10,2);
add_filter('get_the_author_url',array(__CLASS__,'author_link'),10,2);
}
static function init() {
register_post_type('towfiq-person',
array(
'labels' => array('name'=>'People','singular_name'=>'Person'),
'public' => true,
'show_ui' => true,
'rewrite' => array('slug' => 'people'),
'hierarchical' => false,
//'supports' => array('title','editor','custom-fields'),
)
);
}
static function get_email_key() {
return apply_filters( 'person_email_key', '_email' );
}
static function profile_update($user_id,$old_user_data=false) {
global $wpdb;
$is_new_person = false;
$user = get_userdata($user_id);
$user_email = ($old_user_data ? $old_user_data->user_email : $user->user_email);
$email_key = self::get_email_key();
$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));
if (!is_numeric($person_id)) {
$person_id = $is_new_person = wp_insert_post(array(
'post_type' => 'towfiq-person',
'post_status' => 'publish', // Maybe this should be pending or draft?
'post_title' => $user->display_name,
));
}
update_user_meta($user_id,'_person_id',$person_id);
update_post_meta($person_id,'_user_id',$user_id);
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);
}
}
static function wp_insert_post($person_id,$person) {
if ($person->post_type=='towfiq-person') {
$email = get_post_meta($person_id,self::get_email_key(),true);
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
$user = get_user_by('email',$email);
if ($user) { // Associate the user IF there is an user with the same email address
update_user_meta($user->ID,'_person_id',$person_id);
update_post_meta($person_id,'_user_id',$user->ID);
} else {
delete_post_meta($person_id,'_user_id');
}
}
}
}
static function get_user_id($person_id) {
return get_user_meta($user_id,'_user_id',true);
}
static function get_user($person_id) {
$user_id = self::get_user_id($person_id);
return get_userdata($user_id);
}
static function get_person_id($user_id) {
return get_user_meta($user_id,'_person_id',true);
}
static function get_person($user_id) {
$person_id = self::get_person_id($user_id);
return get_post($person_id);
}
static function author_link($permalink, $user_id) {
$author_id = get_user_meta($user_id,'_person_id',true);
if ($author_id) // If an associate is found, use it
$permalink = get_post_permalink($author_id);
return $permalink;
}
}
Towfiq_Person::on_load();
Se hai bisogno di chiarimenti su cosa ho fatto e perché, basta chiedere nei commenti.