Salut @Towfiq :
Les commentaires sont liés dans la base de données aux messages. Vous devrez faire beaucoup de travail pour que les commentaires concernent les utilisateurs.
Avez-vous envisagé de créer un type de publication personnalisé pour les utilisateurs, puis d'utiliser un user_meta
champ pour stocker le post_id
, ou un postmeta
champ pour stocker le user_id
, ou les deux? Si vous faisiez cela, vous obtiendriez les commentaires sans aucun effort.
MISE À JOUR
Ce qui suit est un code développé après notre discussion dans les commentaires.
J'avais l'intention d'écrire quelque chose comme ça depuis longtemps, mais votre recherche de questions m'a amené à en faire une priorité. J'ai créé un 'towfiq-person'
type de publication personnalisé pour vous et je l'ai configuré pour ajouter automatiquement une publication Personne chaque fois qu'un utilisateur est ajouté et il utilise l'adresse e-mail comme clé d'association dans un champ personnalisé de publication appelé '_email'
.
Il associe également un utilisateur avec une adresse e - mail appropriée au poste personne si un utilisateur est ajouté ou mis à jour avec le même courriel comme existant personne (ce qui peut ou ne peut pas être une bonne idée.) Et les références croisées utilisateur avec personne et Personne avec l'utilisateur utilisant les champs postmeta et usermeta '_user_id'
et '_person_id'
, respectivement.
Ce sont bien sûr des règles commerciales que j'ai choisi de mettre en œuvre, mais elles peuvent ne pas convenir à votre cas d'utilisation, auquel cas vous devrez peut-être les modifier. Vous pouvez également trouver des moyens pour que WordPress permette à ces deux-là de se désynchroniser, mais il est difficile de le savoir sans des tests exhaustifs. Si vous rencontrez des problèmes, vous pouvez toujours chercher à mettre à jour la logique pour les résoudre.
Vous pouvez copier le code suivant dans le functions.php
fichier de votre thème :
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();
Si vous avez besoin d'éclaircissements sur ce que j'ai fait et pourquoi, demandez simplement dans les commentaires.
author
type de message personnalisé. Ensuite, sur letaxonomy-author.php
fichier modèle, vous interrogez également tous les articles de l'auteur actuel , et ainsi "falsifiez" votre page d'auteur. Vous pouvez également le faire dans l'autre sens (utilisez le modèle d'auteur et incluez la publication personnalisée), mais vous devez ensuite tromper le formulaire de commentaires pour utiliser le bon identifiant de publication.taxonomy-author.php
, maissingle-author.php
. Vous ne créez pas une taxonomie personnalisée, mais un type de publication personnalisé. Lesingle-author.php
est le fichier modèle qui est utilisé pour afficher un seul poste deauthor
type poste personnalisé. Je vous suggère de suivre cette voie, c'est la plus simple (vous pouvez également utiliser paging (/page/2/
) si vous avez de nombreux articles de cet auteur).if ($person->post_type=='towfiq-person') {
. Faites-moi savoir ...Ajoutez simplement une boucle de type de publication personnalisée dans author.php et utilisez le formulaire de commentaire de cette publication personnalisée. Je l'ai fait plusieurs fois et cela fonctionne très bien.
https://github.com/pjeaje/code-snippets/blob/gh-pages/GP%20author.php%20with%20multiple%20loops
la source