Distributor: μ˜¬λ°”λ₯Έ μž‘μ„±μžμ™€ κ²Œμ‹œλ¬Ό 배포

에 λ§Œλ“  2018λ…„ 02μ›” 23일  Β·  9μ½”λ©˜νŠΈ  Β·  좜처: 10up/distributor

μš°λ¦¬λŠ” κ½€ 큰 μ‚¬μ΄νŠΈ λ„€νŠΈμ›Œν¬λ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€. λͺ¨λ‘ μ μ ˆν•œ μž‘μ„±μž 정보λ₯Ό ν‘œμ‹œν•΄μ•Ό ν•©λ‹ˆλ‹€. ν˜„μž¬ DistributorλŠ” 배포된 κ²Œμ‹œλ¬Ό μž‘μ„±μžλ₯Ό 인증된 μ‚¬μš©μž ID둜 μ„€μ •ν•©λ‹ˆλ‹€. λ‚˜λŠ” 이것을 λ°”κΎΈκ³  μ‹ΆμŠ΅λ‹ˆλ‹€(그리고 기꺼이 슀슀둜 일을 ν•  의ν–₯이 μžˆμŠ΅λ‹ˆλ‹€). λ‹€μŒμ€ 두 가지 κ°€λŠ₯ν•œ μ†”λ£¨μ…˜μž…λ‹ˆλ‹€.

  1. κ°€μž₯ κ°„λ‹¨ν•œ 방법은 μ›λž˜ κ²Œμ‹œλ¬Ό μž‘μ„±μžμ˜ μ‚¬μš©μž IDλ₯Ό μ „λ‹¬ν•˜κ³  λͺ¨λ“  μ‚¬μ΄νŠΈμ—μ„œ μ‚¬μš©μž IDκ°€ λ™κΈ°ν™”λ˜λ„λ‘ κ΄€λ¦¬μžμ—κ²Œ λ§‘κΈ°λŠ” κ²ƒμž…λ‹ˆλ‹€. μΌμ’…μ˜ SSO ν”ŒλŸ¬κ·ΈμΈμ„ μ‚¬μš©ν•˜λŠ” 경우 이 μž‘μ—…μ΄ 쑰금 더 μ‰¬μ›Œμ§‘λ‹ˆλ‹€.
  2. κΈ°μ‘΄ κ²Œμ‹œλ¬Ό μž‘μ„±μž ID 및 μ‚¬μ΄νŠΈλ₯Ό 기반으둜 "μ˜¬λ°”λ₯Έ" μž‘μ„±μž IDλ₯Ό 전달할 수 μžˆλ„λ‘ κ²Œμ‹œλ¬Ό 생성에 후크λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€(λ˜λŠ” pull의 경우 κΈ°μ‘΄ dt_item_mapping λ˜λŠ” ν‘Έμ‹œ ν•„ν„°μ˜ 경우 dt_push_post_args μ‚¬μš©). μš°λ¦¬λŠ”μ— κ²Œμ‹œν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄μ„œλŠ” μ΅œμ’… μ‚¬μš©μžκ°€ μ™ΈλΆ€ μ‚¬μ΄νŠΈ μž‘μ„±μž ID에 λŒ€ν•œ ν˜„μž¬ μ‚¬μ΄νŠΈ μž‘μ„±μž ID의 맡 β€‹β€‹λ˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€κ°€ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. λ§Žμ€ κ΄€λ¦¬μžκ°€ κ΅¬μΆ•ν•˜λŠ” 것이 μ„Έμƒμ—μ„œ κ°€μž₯ μ–΄λ €μš΄ 것은 μ•„λ‹ˆμ§€λ§Œ μ—¬μ „νžˆ κ½€ 높은 κΈ°μ€€μž…λ‹ˆλ‹€. μ‚¬λžŒλ“€μ΄ 이것이 μ΅œμ„ μ˜ 방법이라고 μƒκ°ν•œλ‹€λ©΄ λ‚˜λŠ” μ•„λ§ˆλ„ λ‚΄ μžμ‹ μ˜ μ†”λ£¨μ…˜μ„ μž‘μ„±ν•˜κ³  README.md 에 λ¬Έμ„œν™”ν•  κ²ƒμž…λ‹ˆλ‹€. κ²°κ΅­ 이λ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ λ°°ν¬μžμ—μ„œ UIλ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ–΄μ¨Œλ“ , μ–΄λ–€ 경둜둜 κ°€μ•Όν•˜λŠ”μ§€ λ˜λŠ” μ™„μ „νžˆ λ‹€λ₯Έ κ²½λ‘œμ— λŒ€ν•œ ν”Όλ“œλ°±μ„ μ°Ύκ³  μžˆμŠ΅λ‹ˆλ‹€. μ΅œλŒ€ν•œ 빨리 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ €κ³  ν•˜λ©° λ¬Όλ‘  ν”ŒλŸ¬κ·ΈμΈμ— λŒ€ν•œ λ³€κ²½ 사항을 λ‹€μ‹œ μ œμΆœν•  κ²ƒμž…λ‹ˆλ‹€.

Enterprise support enhancement

λͺ¨λ“  9 λŒ“κΈ€

μš°λ¦¬λŠ” 자체 μ‹ λ””μΌ€μ΄μ…˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μž‘μ„±ν•˜κ³  μž‘μ„±μžμ˜ 이메일 μ£Όμ†Œλ₯Ό μ‚¬μš©ν•˜μ—¬ μˆ˜μ‹  μ‚¬μ΄νŠΈμ—μ„œ IDλ₯Ό μ‘°νšŒν–ˆμŠ΅λ‹ˆλ‹€. 이것은 μž‘μ„±μžκ°€ λ„€νŠΈμ›Œν¬μ˜ λͺ¨λ“  μ‚¬μ΄νŠΈμ—μ„œ λ™μΌν•œ 이메일 μ£Όμ†Œλ₯Ό μ‚¬μš©ν•œλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€.

@dleeward 팁 κ°μ‚¬ν•©λ‹ˆλ‹€. 방금 ν‘Έμ‹œν•˜λŠ” λ™μ•ˆ μž‘μ„±μžλ₯Ό λ™κΈ°ν™”ν•˜κΈ° μœ„ν•΄ ν…Œλ§ˆ functions.php에 μžˆμ„ 수 μžˆλŠ” 일뢀 μ½”λ“œλ₯Ό ν•¨κ»˜ ν•΄ν‚Ήν–ˆμŠ΅λ‹ˆλ‹€. μ „λ‹¬λœ 이메일 μ£Όμ†Œλ‘œ μž‘μ„±μžλ₯Ό 찾으렀고 μ‹œλ„ν•©λ‹ˆλ‹€. κΈ°μ‘΄ μ‚¬μš©μžλ₯Ό 찾을 수 μ—†λŠ” 경우 ν‘Έμ‹œ WP의 μ†μ„±μœΌλ‘œ μ‚¬μš©μžκ°€ μƒμ„±λ©λ‹ˆλ‹€. 이것은 아직 잘 ν…ŒμŠ€νŠΈλ˜μ§€ μ•Šμ•˜μœΌλ©° 아직 ν”„λ‘œλ•μ…˜μ—μ„œ μ‚¬μš©ν•΄μ„œλŠ” μ•ˆλ©λ‹ˆλ‹€.

if ( defined( 'DT_VERSION' ) ) {
  function setup_distributor_replacements() {
    $post_types = get_post_types(array('show_in_rest' => true));
    foreach ( $post_types as $post_type ) {
      add_action( "rest_insert_{$post_type}", 'process_original_author', 10, 3 );
    }
  }

  function process_original_author( $post, $request, $update ) {
    if ( empty( $post ) || is_wp_error( $post ) ) {
      return;
    }
    if ( ! empty( $request['distributor_original_author'] ) ) {
      $author_obj = $request['distributor_original_author'];
      $new_author = get_user_by( 'email', $author_obj['email'] );
      $author_id = 0;
      if ( ! empty( $new_author ) && ! is_wp_error( $new_author ) ) {
        $author_id = $new_author->ID;
      } else {
        $create_user = wp_insert_user(array(
          'display_name'      => $author_obj['display_name'],
          'first_name'        => $author_obj['first_name'],
          'last_name'         => $author_obj['last_name'],
          'nickname'          => $author_obj['nickname'],
          'user_displayname'  => $author_obj['user_displayname'],
          'user_email'        => $author_obj['user_email'],
          'user_login'        => $author_obj['user_login'],
          'user_nicename'     => $author_obj['user_nicename'],
          'user_pass'         => NULL
        ));
        if ( is_wp_error( $create_user ) ) {
          error_log("Error creating user during Distributor push ".$create_user->get_error_message());
          return;
        }
        $author_id = $create_user;
      }
      wp_update_post( array( 'ID' => $post->ID, 'post_author' => $author_id ) );
    }
  }

  add_action('init', 'setup_distributor_replacements');

  function add_original_author($post_body, $post, $that) {
    $post_author = get_user_by( 'id', $post->post_author );
    $author_obj = array(
      'display_name'  => $post_author->display_name,
      'first_name'    => get_user_meta($post->post_author, 'first_name', true),
      'first_name'    => get_user_meta($post->post_author, 'first_name', true),
      'last_name'     => get_user_meta($post->post_author, 'last_name', true),
      'user_email'    => $post_author->user_email,
      'user_login'    => $post_author->user_login,
      'user_nicename' => $post_author->user_nicename,
    );
    $post_body['distributor_original_author'] = $author_obj;
    return $post_body;
  }

  add_filter('dt_push_post_args', 'add_original_author', 1, 3);

}

@robbiet480 μ›μ €μžμ˜ user_loginκ³Ό user_nicename이 이미 μ‚¬μš©λ˜κ³  μžˆμ§€ μ•Šλ‹€κ³  κ°€μ •ν•˜λ©΄ μ•ˆ λ©λ‹ˆλ‹€. ABC1519562843κ³Ό 같은 짧은 ν…μŠ€νŠΈ λ¬Έμžμ—΄μ΄ μ ‘λ‘μ‚¬λ‘œ 뢙은 ν˜„μž¬ μœ λ‹‰μŠ€ μ‹œκ°„μ˜ μž„μ˜ μ‚¬μš©μž 이름을 λ§Œλ“­λ‹ˆλ‹€. 이것은 μ΄ˆλ‹Ή ν•œ λͺ… μ΄μƒμ˜ μ‚¬μš©μžλ₯Ό μƒμ„±ν•˜μ§€ μ•ŠλŠ”λ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. λ§ˆμ΄ν¬λ‘œνƒ€μž„μ„ μ‚¬μš©ν•˜κ±°λ‚˜ λŒ€μ‹  μž„μ˜μ˜ 접미사λ₯Ό μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μš°λ¦¬λŠ” 이것에 λŒ€ν•΄ 많이 λ…Όμ˜ν–ˆμŠ΅λ‹ˆλ‹€.

일반적으둜 인증된 μ‚¬μš©μžλ‘œ κ²Œμ‹œν•˜λŠ” 것이 λͺ¨λ“  μ‚¬λžŒμ—κ²Œ κ°€μž₯ μ•ˆμ „ν•œ κ°€μž₯ ν˜Έν™˜ κ°€λŠ₯ν•œ μ†”λ£¨μ…˜μ΄λΌκ³  λ―ΏμŠ΅λ‹ˆλ‹€. κ²Œμ‹œμžλ§ˆλ‹€ μš”κ΅¬ 사항이 λ‹€λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 원격 μ‚¬μ΄νŠΈμ—μ„œ μƒˆ μ‚¬μš©μžλ₯Ό λ§Œλ“€λ©΄ λ§Žμ€ μ–΄λ €μš΄ 질문이 μƒκΉλ‹ˆλ‹€. μƒˆ μ‚¬μš©μž 역할은 λ¬΄μ—‡μž…λ‹ˆκΉŒ? μ›λž˜ μž‘μ„±μžκ°€ ν•΄λ‹Ή 계정에 μ•‘μ„ΈμŠ€ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆκΉŒ?

λ¬Όλ‘  이것은 토둠을 μœ„ν•΄ μ—΄λ € 있으며 λ‹€λ₯Έ μ˜κ²¬μ„ λ“£κ³  μ‹Άμ§€λ§Œ ν˜„μž¬ λ‘œμ„œλŠ” @robbiet480 이 더 μ‰½κ²Œ μˆ˜ν–‰ν•  수 μžˆλ„λ‘ μΆ”κ°€ 후크/ν•„ν„°λ₯Ό μΆ”κ°€ν•˜λŠ” 것이 μ΅œμ„ μž…λ‹ˆλ‹€.

ν•œ 가지 μœ μ˜ν•  점은 λ§Žμ€ 좜판물이 μ½˜ν…μΈ μ— λŒ€ν•΄ μ—¬λŸ¬ μž‘μ„±μžλ₯Ό 지원해야 ν•˜κ³  μ΄λŸ¬ν•œ 경우 "μ‚¬μš©μž"κ°€ μž‘μ„±μž <-> μ½˜ν…μΈ  관계에 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” κ²½μš°κ°€ λ§Žλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

DFMμ—μ„œ μ½˜ν…μΈ  μ‹ λ””μΌ€μ΄μ…˜ μž‘μ—…μ„ ν•  λ•Œ κ²Œμ‹œλ¬Όμ— λ§Žμ€ μž‘μ„±μžλ₯Ό μΆ”κ°€ν•˜κΈ° μœ„ν•œ ν•˜μ΄λΈŒλ¦¬λ“œ κ²Œμ‹œλ¬Ό μœ ν˜•/λΆ„λ₯˜ μ†”λ£¨μ…˜μΈ Co-Authors Plusλ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ 우리의 경우 μ‹€μ œλ‘œ 인증된 μ‚¬μš©μžκ°€ λ‹€μŒκ³Ό 같이 κ²Œμ‹œλ¬Όμ— μ—°κ²°λ˜κΈ°λ₯Ό _μ›ν–ˆμŠ΅λ‹ˆλ‹€_. μ‹ λ””μΌ€μ΄νŠΈλœ μ½˜ν…μΈ μ˜ μž‘μ„±μžμ΄λ―€λ‘œ μ–΄λ–€ μ‚¬μš©μžκ°€ μ‹ λ””μΌ€μ΄μ…˜μ„ νŠΈλ¦¬κ±°ν–ˆλŠ”μ§€ μΆ”μ ν•˜κ³  μž‘μ„±μž<->μ½˜ν…μΈ  관계λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ μΆ”κ°€ 데이터λ₯Ό μ‹ λ””μΌ€μ΄νŠΈν–ˆμŠ΅λ‹ˆλ‹€(미디어에 λŒ€ν•œ 관계가 μ²˜λ¦¬λ˜λŠ” 방식과 λ‹€μ†Œ μœ μ‚¬).

ν”Όλ“œλ°±μ— κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€, 제이슨!

κ·Έλž˜μ„œ μ €λŠ” 이것을 ν•œ 단계 더 λ°œμ „μ‹œμΌ°κ³  μ‹€μ œλ‘œ 후크λ₯Ό 톡해 Co-Authors Plus에 λŒ€ν•œ 지원을 Distributor에 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ€ 톡합에 관심이 μžˆλŠ” λ‹€λ₯Έ μ‚¬λžŒμ„ μœ„ν•œ μ½”λ“œμž…λ‹ˆλ‹€. λ””μŠ€νŠΈλ¦¬λ·°ν„°μ— ν¬ν•¨λ˜λŠ” 것에 λŒ€ν•΄ #131에 λ¬Έμ˜ν–ˆμŠ΅λ‹ˆλ‹€.

<?php

function handle_dt_process_distributor_attributes( $post, $request, $update ) {
  if ( empty( $post ) || is_wp_error( $post ) ) {
    return;
  }

  if ( is_plugin_active( 'co-authors-plus/co-authors-plus.php' ) && ! empty( $request['distributor_coauthors'] ) ) {
    global $coauthors_plus;

    $author_logins = array();

    foreach ( $request['distributor_coauthors'] as $coauthor ) {

      $existing_guest_author = $coauthors_plus->guest_authors->get_guest_author_by( 'user_login', $coauthor['user_login'] );

      if ( ! $existing_guest_author ) {
        $guest_author_id = $coauthors_plus->guest_authors->create( array(
          'display_name' => $coauthor['display_name'],
          'first_name' => $coauthor['first_name'],
          'last_name' => $coauthor['last_name'],
          'user_login' => $coauthor['user_login'],
          'user_nicename' => $coauthor['user_nicename']
        ) );

        if ( is_wp_error( $guest_author_id ) ) {
          error_log("Error creating co-author during Distributor push ".$guest_author_id->get_error_message());
          return;
        }

        if ( !$guest_author_id ) {
          error_log( '-- Failed to create guest author.' );
        }

        if ( ! empty($coauthor['avatar_url']) ) {
          require_once(ABSPATH . 'wp-admin/includes/media.php');
          require_once(ABSPATH . 'wp-admin/includes/file.php');
          require_once(ABSPATH . 'wp-admin/includes/image.php');

          $thumbnail_id = media_sideload_image($coauthor['avatar_url'], $guest_author_id, null, 'id');
          set_post_thumbnail($guest_author_id, $thumbnail_id);
        }

        $guest_author = $coauthors_plus->guest_authors->get_guest_author_by( 'ID', $guest_author_id );
        array_push($author_logins, $guest_author->user_login);
      } else {
        array_push($author_logins, $existing_guest_author->user_login);
      }
    }
    clean_post_cache($post->ID);
    $coauthors_plus->guest_authors->delete_guest_author_cache($author_logins[0]);
  }
}

add_action( 'dt_process_distributor_attributes', 'handle_dt_process_distributor_attributes', 10, 3 );

if ( is_plugin_active( 'co-authors-plus/co-authors-plus.php' ) ) {
  function distributor_coauthors_get_avatar_url( $coauthor ) {
    global $coauthors_plus;
    if ( ! is_object( $coauthor ) ) {
      return '';
    }

    if ( isset( $coauthor->type ) && 'guest-author' == $coauthor->type ) {
      if ( ! has_post_thumbnail( $coauthor->ID ) ) {
        return '';
      }

      $large_image_url = wp_get_attachment_image_src( get_post_thumbnail_id( $coauthor->ID ), 'large' );

      return $large_image_url[0];
    }

    // Make sure we're dealing with an object for which we can retrieve an email
    if ( isset( $coauthor->user_email ) ) {
      return get_avatar( $coauthor->user_email, $size, $default, $alt );
    }

    // Nothing matched, an invalid object was passed.
    return '';
  }
}

function add_dt_push_post_args($post_body, $post, $that) {
  if ( is_plugin_active( 'co-authors-plus/co-authors-plus.php' ) ) {
    $post_body['distributor_coauthors'] = array();

    foreach ( $coauthors as $coauthor ) {
      if( array_key_exists("data", $coauthor) ) {
        // Don't include real WP_Users
        continue;
      }
      $coauthor_arr = (array) $coauthor;
      $coauthor_arr['avatar_url'] = distributor_coauthors_get_avatar_url($coauthor);
      array_push($post_body['distributor_coauthors'], $coauthor_arr);
    }
  }

  return $post_body;
}

add_filter('dt_push_post_args', 'add_dt_push_post_args', 1, 3);

add_filter('dt_push_post_timeout', function($default_timeout, $post) {
  return 30;
}, 1, 2);

Re: μ €μžμ™€ ν•¨κ»˜ λ°°ν¬ν•˜λŠ” 것에 λŒ€ν•œ μ›λž˜ 쿼리, λ‚˜λŠ” CAPκ°€ λ°°ν¬μžκ°€ μ μ ˆν•œ μ €μžκ°€ μΈμ •λ˜λ„λ‘ ν•˜λŠ” 쒋은 μŠ€ν†± κ°­ μ†”λ£¨μ…˜μ΄ 될 수 μžˆλ‹€κ³  λ§ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. @tlovett1 이 μ–ΈκΈ‰ν•œ μƒˆλ‘œμš΄ 역할에 λŒ€ν•΄ κ±±μ •ν•˜μ§€ μ•Šμ•„λ„ λ©λ‹ˆλ‹€. μ‚¬μš©μžλŠ” 등이 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, 이제 μš°λ¦¬κ°€ 원본 μ‚¬μ΄νŠΈ 이름을 λ…ΈμΆœν•  수 μžˆλŠ” κ²ƒμ²˜λŸΌ ν”„λ‘ νŠΈμ—”λ“œμ— 원본 μž‘μ„±μžμ™€ 같은 정보λ₯Ό λ…ΈμΆœν•˜κΈ° μœ„ν•΄ ν…œν”Œλ¦Ώ νƒœκ·Έλ₯Ό 더 μΆ”κ°€ν•˜λŠ” 것이 합리적이라고 μƒκ°ν•©λ‹ˆλ‹€.

이 λ¬Έμ œλŠ” #131의 κ²°μ •μœΌλ‘œ μ°¨λ‹¨ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. λ°°ν¬μžκ°€ 후크/필터보닀 μ™ΈλΆ€ ν”ŒλŸ¬κ·ΈμΈμ„ 더 많이 지원할 κ²ƒμ΄λΌλŠ” 결정이 내렀지면 Co-Authors Plusλ₯Ό 톡해 이 νŠΉμ • 문제λ₯Ό 계속 쑰사할 수 있으며 λ°°ν¬μžμ™€ ν•¨κ»˜/ν•¨κ»˜ λ°°ν¬ν•˜λŠ” 데 κ°€μž₯ μ ν•©ν•˜κ²Œ 포함될 수 μžˆμŠ΅λ‹ˆλ‹€. λ°°ν¬μžκ°€ 후크/ν•„ν„° μ „μš© μ ‘κ·Ό 방식을 μ·¨ν•˜λŠ” 경우 이 문제λ₯Ό μ’…λ£Œν•  κ°€λŠ₯성이 λ†’μŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰