हाय @Towfiq :
टिप्पणियाँ डेटाबेस में पोस्ट से संबंधित हैं। उपयोगकर्ताओं से संबंधित टिप्पणियाँ प्राप्त करने के लिए आपको बहुत सारे काम करने होंगे।
आप एक बनाने पर विचार किया है कस्टम पोस्ट प्रकार उपयोगकर्ताओं के लिए और फिर या तो एक का उपयोग user_meta
क्षेत्र स्टोर करने के लिए post_id
, या एक postmeta
क्षेत्र स्टोर करने के लिए user_id
, या दोनों? यदि आपने ऐसा किया तो आपको बिना किसी प्रयास के टिप्पणियां मिलेंगी।
अपडेट करें
टिप्पणियों में हमारी चर्चा के बाद क्या कोड विकसित किया गया है।
मैं लंबे समय से इस तरह का कुछ लिखने के लिए अर्थ रखता हूं, लेकिन आपका सवाल मुझे इसे प्राथमिकता बनाने के लिए मिला है। मैंने आपके लिए एक 'towfiq-person'
कस्टम पोस्ट प्रकार बनाया है और जब भी कोई उपयोगकर्ता जोड़ा जाता है, तो अपने आप एक व्यक्ति पोस्ट जोड़ने के लिए इसे स्वचालित रूप से सेट कर देता है और यह ईमेल पते का उपयोग पोस्ट कस्टम फ़ील्ड में सहयोगी कुंजी के रूप में करता है '_email'
।
यह उपयोगकर्ता को व्यक्ति के ईमेल पते के साथ एक उपयुक्त ईमेल पते के साथ भी जोड़ता है यदि कोई उपयोगकर्ता किसी मौजूदा व्यक्ति के समान ईमेल के साथ जोड़ा या अपडेट किया जाता है (यह एक अच्छा विचार हो सकता है या नहीं भी हो सकता है।) और यह व्यक्ति को व्यक्ति के साथ क्रॉस-रेफ़र करता है। उपयोगकर्ता के साथ क्रमशः पोस्टमेटा और usermeta क्षेत्रों '_user_id'
और '_person_id'
, का उपयोग करते हुए।
ये निश्चित रूप से व्यावसायिक नियम हैं जिन्हें मैंने लागू करने के लिए चुना है, लेकिन वे आपके उपयोग-मामले के लिए उपयुक्त नहीं हो सकते हैं जिस स्थिति में आपको उन्हें संशोधित करने की आवश्यकता हो सकती है। आपको ऐसे तरीके भी मिल सकते हैं कि वर्डप्रेस इन दोनों को सिंक से बाहर निकलने की अनुमति देता है, लेकिन यह जानना मुश्किल है कि बिना थकावट के परीक्षण करें। यदि आपको समस्याएँ आती हैं, तो आप हमेशा उन्हें हल करने के लिए तर्क को अद्यतन करने के लिए देख सकते हैं।
आप निम्न कोड को अपनी थीम की 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();
यदि आपको किसी स्पष्टीकरण की आवश्यकता है कि मैंने क्या किया और क्यों किया, तो बस टिप्पणियों में पूछें।