Cześć @Towfiq :
Komentarze są powiązane w bazie danych z postami. Będziesz musiał wykonać wiele pracy, aby Komentarze mogły odnosić się do Użytkowników.
Czy zastanawiałeś się nad utworzeniem niestandardowego typu postu dla użytkowników, a następnie użyłeś user_meta
pola do przechowywania post_id
lub postmeta
pola do przechowywania user_id
, lub obu? Gdybyś to zrobił, wtedy dostałbyś komentarze bez żadnego wysiłku.
AKTUALIZACJA
Poniżej znajduje się kod opracowany po naszej dyskusji w komentarzach.
Chciałem napisać coś takiego od dłuższego czasu, ale znalezienie odpowiedzi na pytanie sprawiło, że uznałem to za priorytet. Stworzyłem 'towfiq-person'
dla Ciebie niestandardowy typ postu i skonfigurowałem go tak, aby automatycznie dodawał wpis Osoby za każdym razem, gdy dodawany jest Użytkownik, i używa adresu e-mail jako klucza powiązania w niestandardowym polu posta o nazwie '_email'
.
Kojarzy również użytkownika z odpowiednim adresem e-mail do posta Osoby, jeśli Użytkownik został dodany lub zaktualizowany przy użyciu tego samego adresu e-mail co istniejąca Osoba (może to być dobry pomysł lub nie). I łączy użytkownika z osobą i osobą Osoba z użytkownikiem używająca odpowiednio pól postmeta i usermeta '_user_id'
oraz '_person_id'
.
Są to oczywiście reguły biznesowe, które zdecydowałem się wdrożyć, ale mogą okazać się nieodpowiednie dla twojego przypadku użycia, w którym to przypadku może być konieczna ich modyfikacja. Możesz również znaleźć sposoby, w jakie WordPress pozwala tym dwóm zsynchronizować się, ale trudno jest to wiedzieć bez wyczerpujących testów. Jeśli znajdziesz problemy, zawsze możesz spróbować zaktualizować logikę, aby je rozwiązać.
Możesz skopiować następujący kod do functions.php
pliku motywu :
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();
Jeśli potrzebujesz wyjaśnień na temat tego, co zrobiłem i dlaczego, po prostu zapytaj w komentarzach.
author
niestandardowego typu. Następnie wtaxonomy-author.php
pliku szablonu pytasz również o wszystkie posty bieżącego autora , a tym samym „fałszujesz” swoją stronę autora. Możesz to zrobić na odwrót (użyj szablonu autora i dołącz niestandardowy post), ale musisz oszukać formularz komentowania, aby użyć właściwego identyfikatora posta.taxonomy-author.php
, alesingle-author.php
. Nie tworzysz niestandardowej systematyki, ale niestandardowy typ postu. Jestsingle-author.php
to plik szablonu używany do wyświetlania pojedynczego postuauthor
niestandardowego typu postu. Sugeruję pójście tą drogą, jest to najłatwiejsze (możesz również użyć stronicowania (/page/2/
), jeśli masz wiele postów tego autora).if ($person->post_type=='towfiq-person') {
. Daj mi znać ...Po prostu dodaj niestandardową pętlę typu posta w autor.php i użyj formularza komentarza tego posta. Zrobiłem to wiele razy i działa świetnie.
https://github.com/pjeaje/code-snippets/blob/gh-pages/GP%20author.php%20with%20multiple%20loops
źródło