उपयोगकर्ता प्रोफ़ाइल पृष्ठ में टिप्पणी करना?


9

मैं इस ट्यूटोरियल के मार्गदर्शन के साथ कस्टम यूजर प्रोफाइल बनाने की कोशिश कर रहा हूं: वर्डप्रेस प्रोफाइल पेज कैसे बनाया जाए

मैंने इसे सफलतापूर्वक अपने विषय पर लागू किया है, सब कुछ अच्छी तरह से काम कर रहा है। अब मैं जो भी हासिल करना चाहता हूं वह उपयोगकर्ता प्रोफाइल पेज में टिप्पणी टेम्पलेट प्राप्त करना है, जहां अन्य पंजीकृत उपयोगकर्ता अपने प्रोफाइल पेज पर टिप्पणी पोस्ट कर सकते हैं, फेसबुक वॉल या पिछले.फ एम शाउटबॉक्स की तरह।

मैं इसे इस तरह आज़मा रहा हूँ:

लेखक पृष्ठ में मुझे यह पंक्ति जोड़ी गई है:

<?php comments_template(); ?>

लेकिन यह नहीं दिखा। फिर मैंने इस तरह से कोशिश की: वर्डप्रेस के बाहर वर्डप्रेस कमेंट पाएं

यह टिप्पणी टेम्पलेट को ठीक से जोड़ता है, लेकिन काम नहीं करता है। जब आप सबमिट बटन पर क्लिक करते हैं तो यह एक खाली पृष्ठ पर रीडायरेक्ट करता है।

मुझे लगता है कि लक्ष्य आसानी से प्राप्त करने योग्य नहीं है, इसे टिप्पणी को संग्रहीत करने के लिए प्रत्येक उपयोगकर्ता के लिए कस्टम डेटाबेस निर्माण की आवश्यकता होती है, क्योंकि टिप्पणी प्रणाली केवल कुछ पृष्ठ या पोस्ट की टिप्पणियों को संग्रहीत करती है, किसी अन्य पेज जैसे संग्रह या लेखक पृष्ठ के लिए नहीं।

अगर कोई मुझे सही दिशा दिखा सकता है, तो मैं हमेशा आभारी रहूंगा।

धन्यवाद तौफीक आई।

जवाबों:


13

हाय @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();

यदि आपको किसी स्पष्टीकरण की आवश्यकता है कि मैंने क्या किया और क्यों किया, तो बस टिप्पणियों में पूछें।


तो, आप जो सुझाव दे रहे हैं वह एक कस्टम पोस्ट प्रकार है और लेखक पृष्ठ पर लूप को लागू करना है। और फिर टिप्पणी फ़ॉर्म को डाल दें ताकि अन्य उपयोगकर्ता उस रिक्त पोस्ट पर टिप्पणी पोस्ट कर सकें? लेकिन वही टिप्पणियां हर उपयोगकर्ता प्रोफ़ाइल पृष्ठ पर दिखाई जाएंगी। यह फ़ंक्शन बनाने से बचा जा सकता है जो उपयोगकर्ता के पंजीकृत होने पर wp_insert_post () के साथ उपयोगकर्ता नाम के शीर्षक के साथ कस्टम पोस्ट बनाएगा। पोस्ट का लेखक उपयोगकर्ता हो सकता है। इसलिए, जब हम पोस्ट के लूप को खींचते हैं तो हम लेखक = उपयोगकर्ता शो के साथ पोस्ट को सुनिश्चित करते हैं। क्या मैं सही दिशा में हूँ? क्या मैं इसे जटिल बना रहा हूं?
तौफीक

@Towfiq: वास्तव में, प्रति उपयोगकर्ता आप अपने authorकस्टम पोस्ट प्रकार का एक पोस्ट बनाते हैं । फिर taxonomy-author.phpटेम्पलेट फ़ाइल पर, आप वर्तमान लेखक के सभी पदों के लिए भी क्वेरी करते हैं , और इस प्रकार आपके लेखक पृष्ठ को "नकली" करते हैं। आप इसे दूसरे तरीके से भी कर सकते हैं (लेखक टेम्पलेट का उपयोग करें और कस्टम पोस्ट शामिल करें), लेकिन फिर आपको सही पोस्ट आईडी का उपयोग करने के लिए टिप्पणी फ़ॉर्म को ट्रिक करने की आवश्यकता है।
जान फेब्री डे

आपके उत्तर के लिए धन्यवाद Fabry मुझे वर्गीकरण के बारे में बहुत कम जानकारी नहीं है। मैंने इस पृष्ठ से कुछ प्राप्त करने का प्रयास किया: codex.wordpress.org/Template_Hierarchy#Custom टैक्सोनॉमीज़ प्रदर्शन लेकिन असफल रहे। क्या आप मुझे बता सकते हैं कि टैक्सोनॉमी-ऑथर। एफपी क्या है और यह क्या करेगा? और अगर मैं दूसरे तरीके से कोशिश करूं, तो क्या आपको पोस्ट आईडी ट्रिक करने के बारे में कोई विचार है ?? -थैंक्यू
तौफीक

@ टॉफिक: मेरी गलती, यह नहीं होना चाहिए taxonomy-author.php, लेकिन single-author.php। आप एक कस्टम वर्गीकरण नहीं बनाते हैं, लेकिन एक कस्टम पोस्ट प्रकार। single-author.phpइस बात का एक एकल पोस्ट प्रदर्शित करने के लिए प्रयोग किया जाता है टेम्पलेट फ़ाइल है authorकस्टम पोस्ट प्रकार। मेरा सुझाव है कि आप इस तरह से जाएं, यह सबसे आसान है ( /page/2/यदि आप उस लेखक के कई पोस्ट हैं तो पेजिंग का उपयोग भी कर सकते हैं )।
जनवरी को जन फैब्री

1
@Towfiq? जब मैंने अपने कोड की समीक्षा की तो मुझे कैसे याद आया? हम्म, सॉरी। वैसे भी, यह कितना उपयोगी होना चाहिए जब आप मुझे बताते हैं कि त्रुटि कहां हुई। :) मैं भी आश्चर्यचकित हूं कि यह बिना किसी त्रुटि के मेरे अंत पर काम किया। BTW, मैं इससे पहले एक अलग हुक का उपयोग कर रहा था ताकि अवशेष कोड हो। यहाँ यह क्या ठीक करना चाहिए है: if ($person->post_type=='towfiq-person') {। मुझे बताएं ...
माइकस्किंकेल

0

बस author.php के अंदर एक कस्टम पोस्ट टाइप लूप जोड़ें और उस कस्टम पोस्ट के कमेंट फॉर्म का उपयोग करें। मैंने इसे कई बार किया है और यह बहुत अच्छा काम करता है।

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


ऊपर या नीचे लेखक को जोड़ें। php लूप
पीट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.