Hola @Towfiq :
Los comentarios están relacionados en la base de datos con las publicaciones. Tendrá que hacer mucho trabajo para obtener comentarios que se relacionen con los usuarios.
¿Ha considerado crear un Tipo de publicación personalizado para los usuarios y luego usar un user_meta
campo para almacenar el post_id
, o un postmeta
campo para almacenar el user_id
, o ambos? Si hicieras eso, obtendrías los comentarios sin ningún esfuerzo.
ACTUALIZAR
Lo que sigue es un código desarrollado después de nuestra discusión en los comentarios.
He tenido la intención de escribir algo como esto durante mucho tiempo, pero su búsqueda de preguntas me hizo priorizar. Creé un 'towfiq-person'
tipo de publicación personalizado para usted y lo configuré para agregar automáticamente una publicación de Persona cada vez que se agrega un Usuario y utiliza la dirección de correo electrónico como la clave de asociación en un campo personalizado de publicación llamado '_email'
.
También asocia a un Usuario con una dirección de correo electrónico apropiada a la publicación de la Persona si un Usuario se agrega o actualiza con el mismo correo electrónico que una Persona existente (esto puede o no ser una buena idea). Y hace referencias cruzadas de Usuario con Persona y Persona con usuario que utiliza los campos postmeta y usermeta '_user_id'
y '_person_id'
, respectivamente.
Por supuesto, estas son las reglas de negocios que elegí implementar, pero pueden resultar no ser apropiadas para su caso de uso, en cuyo caso es posible que deba modificarlas. También puede encontrar formas en que WordPress permite que estos dos se desincronicen, pero es difícil saberlo sin pruebas exhaustivas. Si encuentra problemas, siempre puede buscar actualizar la lógica para resolverlos.
Puede copiar el siguiente código en el functions.php
archivo de su 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();
Si necesita alguna aclaración sobre lo que hice y por qué, solo pregunte en los comentarios.
author
tipo de publicación personalizada. Luego, en eltaxonomy-author.php
archivo de plantilla, también consulta todas las publicaciones del autor actual y, por lo tanto, "falsifica" su página de autor. También puede hacerlo al revés (use la plantilla del autor e incluya la publicación personalizada), pero luego debe engañar el formulario de comentarios para usar la identificación de publicación correcta.taxonomy-author.php
, perosingle-author.php
. No crea una taxonomía personalizada, sino un tipo de publicación personalizada. Elsingle-author.php
es el archivo de plantilla que se utiliza para mostrar una sola publicación delauthor
tipo de publicación personalizada. Te sugiero que vayas de esta manera, es la más fácil (también puedes usar paginación (/page/2/
) si tienes muchas publicaciones de ese autor).if ($person->post_type=='towfiq-person') {
. Avísame ...Simplemente agregue un bucle de tipo de publicación personalizada dentro de author.php y use el formulario de comentarios de esa publicación personalizada. Lo he hecho muchas veces y funciona muy bien.
https://github.com/pjeaje/code-snippets/blob/gh-pages/GP%20author.php%20with%20multiple%20loops
fuente