사용자 프로필 페이지에서 댓글을 작성 하시겠습니까?


9

이 자습서의 지침에 따라 사용자 정의 사용자 프로필을 작성하려고합니다 . WordPress 프로필 페이지를 만드는 방법

나는 그것을 내 테마에 성공적으로 구현했으며 모든 것이 잘 작동합니다. 이제 내가 달성하고자하는 것은 등록 된 다른 사용자가 자신의 프로필 페이지에 페이스 북 벽 또는 last.fm shoutbox와 같은 의견을 게시 할 수있는 사용자 프로필 페이지에 주석 템플릿을 얻는 것입니다.

나는 이것을 이렇게 시도하고있다 :

저자 페이지에 다음 줄을 추가했습니다.

<?php comments_template(); ?>

그러나 나타나지 않습니다. 그런 다음이 방법을 시도했습니다 : WordPress 외부에서 WordPress 주석 가져 오기

주석 템플릿을 올바르게 추가하지만 작동하지 않습니다. 제출 버튼을 클릭하면 빈 페이지로 리디렉션됩니다.

의견 시스템은 아카이브 또는 작성자 페이지와 같은 다른 페이지가 아닌 특정 페이지 또는 게시물의 의견 만 저장하기 때문에 목표를 쉽게 달성 할 수 없다고 생각합니다.

누구든지 올바른 방향을 보여줄 수 있다면 나는 영원히 감사 할 것입니다.

감사합니다 Towfiq I.

답변:


13

안녕 @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();

내가 한 일과 이유에 대한 설명이 필요하면 의견을 보내주십시오.


따라서 제안하는 것은 사용자 정의 게시물 유형을 만들고 작성자 페이지에 루프를 구현하는 것입니다. 그런 다음 다른 사용자가 빈 게시물에 의견을 게시 할 수 있도록 의견 양식을 작성 하시겠습니까? 그러나 모든 사용자 프로필 페이지에 동일한 의견이 표시됩니다. 사용자가 등록 될 때 wp_insert_post ()를 사용하여 사용자 이름의 제목으로 사용자 정의 게시물을 자동으로 작성하는 함수를 작성하면 피할 수 있습니다. 게시물의 작성자가 사용자 일 수 있습니다. 따라서, 우리가 포스트 루프를 당길 때 author = user가있는 포스트를 보여줍니다. 내가 올바른 방향으로 가고 있습니까? 복잡하게 만들고 있습니까?
Towfiq

@Towfiq : 사실, 사용자별로 사용자 author정의 게시물 유형의 게시물 하나를 만듭니다 . 그런 다음 taxonomy-author.php템플릿 파일 에서 현재 작성자의 모든 게시물을 쿼리 하여 작성자 페이지를 "가짜"만듭니다. 다른 방법으로도 할 수 있지만 (작성자 템플릿 사용 및 사용자 정의 게시물 포함) 올바른 게시물 ID를 사용하려면 주석 달기 양식을 속 여야합니다.
Jan Fabry

답장을 보내 주셔서 감사합니다 Fabry. 분류 체계에 대한 지식이 거의 없습니다. 이 페이지에서 무언가를 얻으려고했습니다 : codex.wordpress.org/Template_Hierarchy#Custom Taxonomies display 그러나 실패했습니다. taxonomy-author.php가 무엇이며 어떻게하는지 말해 줄 수 있습니까? 그리고 다른 방법으로 시도하면 게시물 ID를 속이는 것에 대한 아이디어가 있습니까? - 고마워요
Towfiq

@Towfiq : 내 실수, 그것은 안 taxonomy-author.php하지만 single-author.php. 맞춤 분류 체계를 만들지 않고 맞춤 게시물 유형을 만듭니다. 는 single-author.php의 하나의 게시물 표시하는 데 사용되는 템플릿 파일 author사용자 정의 포스트 유형입니다. 이 방법을 사용하는 것이 가장 좋습니다 ( /page/2/저자가 작성한 게시물이 많은 경우 페이징 ( )을 사용할 수도 있음).
Jan Fabry

1
@Towfiq? 코드를 검토 할 때 어떻게 그리웠습니까? 흠, 미안 어쨌든 오류가 발생한 위치를 알려 주면 도움이됩니다. :) 나는 그것이 실수없이 내 끝에 일한 것에 놀랐습니다. BTW, 나는 전에 다른 후크를 사용했기 때문에 나머지 코드였습니다. 수정해야 할 사항은 다음과 같습니다 if ($person->post_type=='towfiq-person') {.. 알려주세요 ...
MikeSchinkel

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


위의 위 또는 아래에 author.php 루프 추가
Pete
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.