Hallo @Towfiq :
Kommentare beziehen sich in der Datenbank auf Beiträge. 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
oder ein postmeta
Feld zum Speichern des user_id
oder beides zu verwenden? Wenn Sie das tun würden, würden Sie die Kommentare ohne Anstrengung 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 hat mich dazu gebracht, es zu einer Priorität zu machen. Ich habe einen 'towfiq-person'
benutzerdefinierten Beitragstyp für Sie erstellt und ihn so eingerichtet, dass bei jedem Hinzufügen eines Benutzers automatisch ein Personenbeitrag hinzugefügt wird. Dabei wird die E-Mail-Adresse als Zuordnungsschlüssel in einem benutzerdefinierten Beitragsfeld mit dem Namen verwendet '_email'
.
Außerdem wird ein Benutzer mit einer geeigneten E-Mail-Adresse für den Personenbeitrag verknüpft, 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). Außerdem wird der Benutzer mit Person und Person verglichen Person mit Benutzern mit postmeta und usermeta Feldern '_user_id'
und '_person_id'
ist.
Dies sind natürlich Geschäftsregeln, die ich implementiert habe, aber sie stellen sich möglicherweise als nicht für Ihren Anwendungsfall geeignet heraus. In diesem Fall müssen Sie sie möglicherweise ändern. Möglicherweise finden Sie auch Möglichkeiten, wie WordPress es diesen beiden ermöglicht, nicht mehr synchron zu sein, aber es ist schwer, dies ohne umfassende 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 Klarheit darüber benötigen, was ich getan habe und warum, fragen Sie einfach in den Kommentaren.
author
benutzerdefinierten Beitragstyps. Anschließendtaxonomy-author.php
fragen Sie in der Vorlagendatei auch nach allen Posts des aktuellen Autors und "fälschen" so Ihre Autorenseite. Sie können es auch umgekehrt machen (verwenden Sie die Autorenvorlage und fügen Sie den benutzerdefinierten Beitrag hinzu), aber dann müssen Sie das Kommentarformular austricksen, um die richtige Beitrags-ID zu verwenden.taxonomy-author.php
, abersingle-author.php
. Sie erstellen keine benutzerdefinierte Taxonomie, sondern einen benutzerdefinierten Beitragstyp. Diessingle-author.php
ist die Vorlagendatei, mit der ein einzelner Beitrag desauthor
benutzerdefinierten Beitragstyps angezeigt wird . Ich schlage vor, Sie gehen diesen Weg, es ist der einfachste (Sie können auch paging (/page/2/
) verwenden, wenn Sie viele Beiträge von diesem Autor haben).if ($person->post_type=='towfiq-person') {
. Lass es mich wissen ...Fügen Sie einfach eine benutzerdefinierte Post-Typ-Schleife in author.php hinzu und verwenden Sie das Kommentarformular dieses benutzerdefinierten Posts. Ich habe es schon oft gemacht und es funktioniert großartig.
https://github.com/pjeaje/code-snippets/blob/gh-pages/GP%20author.php%20with%20multiple%20loops
quelle