Olá, @Towfiq :
Os comentários estão relacionados no banco de dados com Postagens. Você precisará fazer muito trabalho para que os Comentários se relacionem com os Usuários.
Você já pensou em criar um Tipo de postagem personalizado para usuários e, em seguida, use um user_meta
campo para armazenar o post_id
, ou um postmeta
campo para armazenar o user_id
ou ambos? Se você fizesse isso, receberia os comentários sem nenhum esforço.
ATUALIZAR
O que segue é um código desenvolvido após nossa discussão nos comentários.
Eu pretendo escrever algo assim por um longo tempo, mas sua busca por perguntas me fez priorizá-la. Criei um 'towfiq-person'
tipo de postagem personalizado para você e configurei-o para adicionar automaticamente uma postagem da Pessoa sempre que um Usuário for adicionado e ele usa o endereço de email como a chave de associação em um campo personalizado da postagem chamado '_email'
.
Ele também associa um Usuário com um endereço de email apropriado à postagem da Pessoa, se um Usuário for adicionado ou atualizado com o mesmo email de uma Pessoa existente (isso pode ou não ser uma boa idéia.) E faz referência cruzada de Usuário com Pessoa e Pessoa com Usuário usando os campos postmeta e usermeta '_user_id'
e '_person_id'
, respectivamente.
É claro que essas são regras de negócios que eu escolhi implementar, mas elas podem não ser apropriadas para o seu caso de uso. Nesse caso, pode ser necessário modificá-las. Você também pode encontrar maneiras de o WordPress permitir que esses dois fiquem fora de sincronia, mas é difícil saber isso sem testes exaustivos. Se você encontrar problemas, sempre poderá atualizar a lógica para resolvê-los.
Você pode copiar o seguinte código no functions.php
arquivo do seu 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 você precisar de algum esclarecimento sobre o que fiz e por quê, basta perguntar nos comentários.
author
tipo de postagem personalizada. Em seguida, notaxonomy-author.php
arquivo de modelo, você também consulta todas as postagens do autor atual e, assim, "falsifica" sua página de autor. Você também pode fazer o contrário (usar o modelo do autor e incluir a postagem personalizada), mas precisará enganar o formulário de comentários para usar o ID da postagem correto.taxonomy-author.php
, massingle-author.php
. Você não cria uma taxonomia personalizada, mas um tipo de postagem personalizado. Osingle-author.php
é o arquivo de modelo usado para exibir uma única postagem doauthor
tipo de postagem personalizada. Eu sugiro que você siga esse caminho, é o mais fácil (você também pode usar paging (/page/2/
) se tiver muitas postagens desse autor).if ($person->post_type=='towfiq-person') {
. Deixe-me saber ...Basta adicionar um loop de tipo de postagem personalizado dentro de author.php e usar o formulário de comentários dessa postagem personalizada. Eu já fiz isso muitas vezes e funciona muito bem.
https://github.com/pjeaje/code-snippets/blob/gh-pages/GP%20author.php%20with%20multiple%20loops
fonte