안녕 @Towfiq :
주석은 데이터베이스에서 게시물과 관련이 있습니다. 댓글이 사용자와 관련되도록하려면 많은 작업을 수행해야합니다.
사용자에 대한 사용자 정의 게시물 유형 작성을 고려한 후 user_meta
필드를 사용하여을 저장 post_id
하거나 postmeta
필드를 사용하여을 (를) 저장 user_id
하시겠습니까? 그렇게했다면 아무런 노력없이 댓글을받을 수 있습니다.
최신 정보
다음은 주석에서 논의한 후 개발 된 코드입니다.
나는 이런 식으로 오랫동안 글을 쓰는 것을 의미했지만 당신의 질문을 발견하면 그것을 우선 순위로 삼았습니다. 'towfiq-person'
사용자를 위한 맞춤 게시물 유형을 만들었으며 사용자가 추가 될 때마다 개인 게시물을 자동으로 추가하도록 설정했으며이 게시물은이라는 게시물 맞춤 입력란에서 관련 키로 이메일 주소를 사용합니다 '_email'
.
사용자는 기존의 사람으로 추가하거나 동일한 이메일로 업데이트되는 경우 또한 사람의 게시물에 대한 적절한 이메일 주소로 사용자를 연결합니다 (이 나. 좋은 아이디어되지 않을 수도 있습니다) 그리고 사람과 함께 사용자 참조 크로스 사용자가 postmeta 및 usermeta 필드를 사용 가진 사람 '_user_id'
과 '_person_id'
각각.
이것들은 물론 구현하기로 선택한 비즈니스 규칙이지만 사용 사례에 적합하지 않은 것으로 판명 될 수 있습니다.이 경우 규칙을 수정해야 할 수도 있습니다. WordPress에서이 두 가지를 동기화하지 못하는 방법을 찾을 수도 있지만 철저한 테스트 없이는이를 알기가 어렵습니다. 문제가 있으면 언제든지 논리를 업데이트하여 문제를 해결할 수 있습니다.
다음 코드를 테마 functions.php
파일에 복사 할 수 있습니다 .
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();
내가 한 일과 이유에 대한 설명이 필요하면 의견을 보내주십시오.