it-swarm.com.de

In Benutzerprofilseite kommentieren?

Ich versuche, ein benutzerdefiniertes Benutzerprofil mit Hilfe dieses Tutorials zu erstellen: Wie erstelle ich eine WordPress-Profilseite

Ich habe es erfolgreich zu meinem Thema implementiert, alles funktioniert gut. Was ich jetzt erreichen möchte, ist, die Kommentarvorlage auf der Benutzerprofilseite zu erhalten, auf der ein anderer registrierter Benutzer Kommentare auf seiner Profilseite posten kann, etwa Facebook-Pinnwand oder last.fm-Shoutbox.

Ich versuche es so:

Auf der Autorenseite habe ich diese Zeile hinzugefügt:

<?php comments_template(); ?>

Aber es zeigt sich nicht. Dann habe ich Folgendes versucht: WordPress-Kommentare außerhalb von WordPress abrufen

Es fügt die Kommentar-Vorlage hinzu, funktioniert aber nicht. Wenn Sie auf die Senden-Schaltfläche klicken, wird auf eine leere Seite weitergeleitet.

Ich denke, das Ziel ist nicht einfach zu erreichen, es erfordert die Erstellung einer benutzerdefinierten Datenbank für jeden Benutzer, um die Kommentare zu speichern, da das Kommentarsystem nur Kommentare von bestimmten Seiten oder Posts speichert, nicht für andere Seiten wie Archive oder Autorenseiten.

Wenn mir jemand die richtige Richtung zeigen kann, bin ich für immer dankbar.

Vielen Dank, Towfiq I.

8
Towfiq

Hi @Towfiq :

Kommentare sind in der Datenbank mit Beiträgen verknüpft. Sie müssen viel arbeiten, um Kommentare zu erhalten, die sich auf Benutzer beziehen.

Haben Sie darüber nachgedacht, einen benutzerdefinierten Beitragstyp für Benutzer zu erstellen und dann entweder ein user_meta -Feld zum Speichern des post_id -Feld oder ein postmeta -Feld zum Speichern des user_id -Feld oder beides zu verwenden? Wenn Sie das tun würden, würden Sie die Kommentare mühelos erhalten.

AKTUALISIEREN

Was folgt, ist Code, der nach unserer Diskussion in den Kommentaren entwickelt wurde.

Ich wollte schon lange so etwas schreiben, aber Ihre Frage brachte mich dazu, es zu einer Priorität zu machen. Ich habe einen benutzerdefinierten Beitragstyp 'towfiq-person' für Sie erstellt und ihn so eingerichtet, dass automatisch ein Personenbeitrag hinzugefügt wird, wenn ein Benutzer hinzugefügt wird. Dabei wird die E-Mail-Adresse als Zuordnungsschlüssel in einem benutzerdefinierten Beitragsfeld mit dem Namen '_email' verwendet.

Es verknüpft einen Benutzer auch mit einer geeigneten E-Mail-Adresse mit dem Beitrag der Person, wenn ein Benutzer mit derselben E-Mail-Adresse wie eine vorhandene Person hinzugefügt oder aktualisiert wird. (Dies kann eine gute Idee sein oder auch nicht.)Und es verweist darauf Benutzer mit Person und Person mit Benutzer, der die Felder Postmeta und Usermeta '_user_id' bzw. '_person_id' verwendet.

Dies sind natürlich Geschäftsregeln, die ich implementiert habe, die sich jedoch möglicherweise als nicht für Ihren Anwendungsfall geeignet herausstellen. In diesem Fall müssen Sie sie möglicherweise ändern. Möglicherweise finden Sie auch Möglichkeiten, mit denen WordPress die Synchronisierung dieser beiden Elemente aufhebt, aber es ist schwierig, dies ohne ausführliche Tests zu wissen. Wenn Sie Probleme finden, können Sie jederzeit versuchen, die Logik zu aktualisieren, um sie zu beheben.

Sie können den folgenden Code in die functions.php-Datei Ihres Themas kopieren:

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();

Wenn Sie Klarstellungen darüber benötigen, was ich getan habe und warum, fragen Sie einfach in den Kommentaren.

13
MikeSchinkel

Fügen Sie einfach eine benutzerdefinierte Post-Typ-Schleife in author.php ein und verwenden Sie das Kommentarformular dieses benutzerdefinierten Posts. Ich habe es schon oft gemacht und es funktioniert großartig.

<?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;
?>

https://github.com/pjeaje/code-snippets/blob/gh-pages/GP%20author.php%20with%20multiple%20loops

0
Pete