Bình luận trong trang hồ sơ người dùng?


9

Tôi đang cố gắng xây dựng hồ sơ người dùng tùy chỉnh với hướng dẫn của hướng dẫn này: Cách tạo trang hồ sơ WordPress

Tôi đã thực hiện thành công nó theo chủ đề của mình, mọi thứ đều hoạt động tốt. Bây giờ những gì tôi muốn đạt được là lấy mẫu bình luận trong trang hồ sơ người dùng, nơi người dùng đã đăng ký khác có thể đăng bình luận trên trang hồ sơ của mình, giống như tường facebook hoặc shout.fm.

Tôi đang thử nó như thế này:

Trong trang tác giả tôi đã thêm dòng này:

<?php comments_template(); ?>

Nhưng nó không xuất hiện. Sau đó, tôi đã thử cách này: Nhận bình luận WordPress bên ngoài WordPress

Nó thêm mẫu nhận xét ổn, nhưng không hoạt động. Khi bạn nhấp vào nút gửi, nó sẽ chuyển hướng đến một trang trống.

Tôi nghĩ mục tiêu không thể đạt được một cách dễ dàng, nó yêu cầu tạo cơ sở dữ liệu tùy chỉnh cho mỗi người dùng để lưu trữ các bình luận, vì hệ thống bình luận chỉ lưu trữ các bình luận của trang hoặc bài đăng nhất định, không cho bất kỳ trang nào khác như trang lưu trữ hoặc trang tác giả.

Nếu ai có thể chỉ cho tôi hướng đi đúng đắn, tôi sẽ mãi biết ơn.

Cảm ơn Towfiq I.

Câu trả lời:


13

Xin chào @Towfiq :

Nhận xét có liên quan trong cơ sở dữ liệu đến Bài viết. Bạn sẽ phải làm rất nhiều việc để có được Nhận xét liên quan đến Người dùng.

Bạn đã xem xét việc tạo Loại bài đăng tùy chỉnh cho người dùng và sau đó sử dụng một user_metatrường để lưu trữ post_idhoặc một postmetatrường để lưu trữ user_idhoặc cả hai? Nếu bạn đã làm điều đó thì bạn sẽ nhận được những bình luận mà không cần nỗ lực nào cả.

CẬP NHẬT

Những gì tiếp theo là mã được phát triển sau khi thảo luận của chúng tôi trong các ý kiến.

Tôi đã có ý định viết một cái gì đó như thế này trong một thời gian dài nhưng việc tìm kiếm câu hỏi của bạn khiến tôi phải ưu tiên nó. Tôi đã tạo một 'towfiq-person'loại bài đăng tùy chỉnh cho bạn và tôi đã thiết lập nó để tự động thêm bài đăng Người mỗi khi Người dùng được thêm và nó sử dụng địa chỉ email làm khóa liên kết trong trường tùy chỉnh bài được gọi '_email'.

Nó cũng liên kết Người dùng với một địa chỉ email thích hợp với bài đăng của Người nếu Người dùng được thêm hoặc cập nhật cùng email với Người hiện tại (điều này có thể hoặc không phải là một ý tưởng hay.) Và nó tham chiếu chéo Người dùng với Người và Người có Người dùng sử dụng các trường postmeta và usermeta '_user_id''_person_id', tương ứng.

Tất nhiên đây là những quy tắc kinh doanh tôi chọn để thực hiện nhưng chúng có thể không phù hợp với trường hợp sử dụng của bạn trong trường hợp bạn có thể cần sửa đổi chúng. Bạn cũng có thể tìm thấy những cách mà WordPress cho phép hai thứ này không đồng bộ nhưng thật khó để biết rằng nếu không có thử nghiệm toàn diện. Nếu bạn tìm thấy các vấn đề, bạn luôn có thể tìm cách cập nhật logic để giải quyết chúng.

Bạn có thể sao chép mã sau vào functions.phptệp của chủ đề :

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();

Nếu bạn cần bất kỳ sự làm rõ cho những gì tôi đã làm và tại sao, chỉ cần hỏi trong các ý kiến.


Vì vậy, những gì bạn đang đề xuất là tạo một loại bài đăng tùy chỉnh và thực hiện vòng lặp đến trang tác giả. Và sau đó đưa lên mẫu bình luận để người dùng khác có thể đăng bình luận vào bài viết trống đó? Nhưng những bình luận tương tự sẽ được hiển thị cho mọi trang hồ sơ người dùng. Có thể tránh bằng cách tạo chức năng sẽ tự động tạo bài đăng tùy chỉnh với tiêu đề tên người dùng với wp_insert_post () khi người dùng được đăng ký. Tác giả của bài viết có thể là người dùng. Vì vậy, khi chúng tôi kéo vòng lặp của bài đăng, chúng tôi đảm bảo bài đăng có tác giả = người dùng hiển thị. Tôi có đi đúng hướng không? Tôi đang làm cho nó phức tạp?
Towfiq

@Towfiq: Thật vậy, mỗi người dùng bạn tạo một bài đăng thuộc authorloại bài đăng tùy chỉnh của mình . Sau đó, trên taxonomy-author.phptệp mẫu, bạn cũng truy vấn tất cả các bài đăng của tác giả hiện tại và do đó "giả mạo" trang tác giả của bạn. Bạn cũng có thể làm theo cách khác (sử dụng mẫu tác giả và bao gồm bài đăng tùy chỉnh), nhưng sau đó bạn cần phải lừa mẫu nhận xét để sử dụng đúng id bài đăng.
Jan Fabry

Cảm ơn bạn đã trả lời Fabry. Tôi không có quá ít kiến ​​thức về phân loại học. Tôi đã cố gắng để có được một cái gì đó từ trang này: codex.wordpress.org/Template_HVELy#Custom Taxonomies hiển thị Nhưng không thành công. bạn có thể cho tôi biết taxonomy-Author.php là gì không và nó sẽ làm gì? và nếu tôi thử cách khác, bạn có ý tưởng nào về việc lừa id bài không ?? -Cảm ơn
Towfiq

@Towfiq: Lỗi của tôi, không nên taxonomy-author.php, nhưng single-author.php. Bạn không tạo phân loại tùy chỉnh, nhưng loại bài đăng tùy chỉnh. Đây single-author.phplà tệp mẫu được sử dụng để hiển thị một bài đăng của authorloại bài đăng tùy chỉnh. Tôi đề nghị bạn đi theo cách này, nó dễ nhất (bạn cũng có thể sử dụng phân trang ( /page/2/) nếu bạn có nhiều bài đăng từ tác giả đó).
Jan Fabry

1
@Towfiq? Làm thế nào tôi bỏ lỡ điều đó khi tôi xem lại mã của mình? Hừm, xin lỗi. Dù sao, nó sẽ hữu ích như thế nào khi bạn cho tôi biết lỗi xảy ra ở đâu. :) Tôi cũng ngạc nhiên khi nó hoạt động vào cuối của tôi mà không có lỗi. BTW, tôi đã sử dụng một hook khác trước đây để đó là mã còn lại. Đây là những gì nên sửa chữa nó : if ($person->post_type=='towfiq-person') {. Hãy cho tôi biết ...
MikeSchinkel

0

Chỉ cần thêm một vòng lặp loại bài đăng tùy chỉnh bên trong Author.php và sử dụng mẫu nhận xét của bài đăng tùy chỉnh đó. Tôi đã thực hiện nó nhiều lần và nó hoạt động rất tốt.

<?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%20 Author.php% 20with% 20mult Môn% 20loops


Thêm ở trên hoặc dưới vòng lặp tác giả.php
Pete
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.