Comentando na página do perfil do usuário?

8
Estou tentando criar um perfil de usuário personalizado com a orientação deste tutorial: > Como criar uma página de perfil do WordPress

Eu o implementei com sucesso para o meu tema, tudo está funcionando bem. Agora, o que eu quero alcançar é obter o modelo de comentário na página de perfil do usuário, onde outro usuário registrado pode postar comentários em sua página de perfil, como o facebook wall ou o last.fm shoutbox.

Estou tentando assim:

Na página do autor, estou adicionando esta linha:

<?php comments_template(); ?>

Mas isso não aparece. Então eu tentei desta forma: Obtenha comentários do WordPress fora do WordPress

Adiciona o modelo de comentário, mas não funciona. Quando você clica no botão enviar, ele redireciona para uma página em branco.

Eu acho que o objetivo não é realizável facilmente, requer criação de banco de dados personalizado para cada usuário para armazenar os comentários, já que o sistema de comentários armazena apenas comentários de determinada página ou post, não para qualquer outra página como arquivo ou autor. / p>

Se alguém puder me mostrar a direção certa, serei eternamente grato.

Obrigado Towfiq I.

    
por Towfiq 31.12.2010 / 09:11

2 respostas

13

Oi @Towfiq :

Os comentários estão relacionados no banco de dados com as postagens. Você terá que trabalhar muito para fazer com que os Comentários se relacionem com os Usuários.

Já pensou em criar um tipo de postagem personalizado para Usuários e, em seguida, use um campo user_meta para armazenar o campo post_id ou postmeta para armazenar o user_id ou ambos? Se você fizesse isso, receberia os comentários sem nenhum esforço.

UPDATE

O que segue é o código desenvolvido após nossa discussão nos comentários.

Eu tenho pensado em escrever algo assim por muito tempo, mas sua pergunta me fez ter prioridade. Eu criei um tipo de postagem personalizado 'towfiq-person' para você e configurei-o para adicionar automaticamente uma postagem de pessoa sempre que um usuário é adicionado e ele usa o endereço de e-mail como a chave de associação em um campo personalizado de postagem chamado '_email' .

Ele também associa um usuário a um endereço de e-mail apropriado à postagem pessoal se um usuário for adicionado ou atualizado com o mesmo e-mail de uma pessoa existente (isso pode ou não ser uma boa ideia). 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.

Essas são, é claro, regras comerciais que escolhi implementar, mas elas podem não ser apropriadas para o seu caso de uso, caso em que você pode precisar modificá-las. Você também pode encontrar maneiras que o WordPress permite que esses dois fiquem fora de sincronia, mas é difícil saber disso sem testes exaustivos. Se você encontrar problemas, pode sempre procurar atualizar a lógica para resolvê-los.

Você pode copiar o código a seguir para o arquivo functions.php 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 eu fiz e por quê, basta perguntar nos comentários.

    
por MikeSchinkel 31.12.2010 / 10:37
0

Basta adicionar um loop de tipo de postagem personalizado dentro do author.php e usar o formulário de comentários desse post personalizado. Já fiz isso muitas vezes e funciona muito bem.

<?php /* Display the author's comments from the custom post type (AAA) */ ?>
<?php
$authorid = get_the_author_meta( ID, $userID );
$args=array('author' => $authorid,'post_type' => 'AAA', 'numberposts' => -1);
$cquery=new WP_Query($args);
if($cquery->have_posts()):
while($cquery->have_posts()):
$cquery->the_post();
?>          
<div class="comments-area">
    <?php comments_template(); ?>
</div>
<?
    endwhile;
        wp_reset_postdata();
    endif;
?>

enlace

    
por Pete 20.01.2017 / 03:17