WooCommerce: WP 대시보드에서 자체 호스팅 플러그인 업데이트

게시 됨: 2023-06-07

이 백만 달러짜리 튜토리얼에서는 WordPress 대시보드에서 직접 어딘가에서 호스팅하는 사용자 정의(WooCommerce) 플러그인을 업데이트하는 방법을 배웁니다.

워드프레스 대시보드는 플러그인 업데이트만 알려주고 워드프레스 리포지토리에 있는 플러그인만 독점적으로 업데이트할 수 있다고 생각했지만 틀렸습니다!

여기 Business Bloomer에서 WooCommerce 플러그인을 판매하기 시작한 이래로 고객이 WP 관리자에서 바로 자동으로 플러그인을 업데이트할 수 있는 방법을 찾아야 했습니다.

고맙게도 구출할 수 있는 2개의 후크가 있습니다: pre_set_site_transient_update_plugins update_plugins_{$hostname}plugins_api . 이 두 필터를 사용하여 사용자 지정 플러그인 ZIP 파일을 지정된 공개 URL에서 다운로드할 수 있음을 WordPress에 알리고, 플러그인 업데이트를 사용할 수 있다는 알림을 고객에게 표시하고, 한 번의 클릭으로 업데이트하도록 하고, 선택적으로 자동 실행을 활성화하도록 할 수 있습니다. 업데이트.

그럼 제가 플러그인 사업을 어떻게 운영하는지 봅시다. 즐기다!

이 WordPress 대시보드 스크린샷에서 "Business Bloomer WooCommerce 로그인 등록 쇼트코드" 플러그인에 대한 업데이트를 사용할 수 있고 "버전 세부 정보 보기" 또는 "지금 업데이트"할 수 있음을 명확하게 확인할 수 있습니다. 마법 같은 것은 – 이것은 WordPress 저장소가 아닌 제가 호스팅하는 플러그인입니다!
목차
  1. 1단계: 커스텀 플러그인 생성 및 호스팅
  2. 2단계: JSON 변경 로그 파일 생성
  3. 3단계: WordPress 사이트에 사용자 지정 플러그인 설치
  4. 4단계: PHP 스니펫 – WordPress 대시보드에서 사용자 지정 플러그인 업데이트
  5. 요약

1단계: 커스텀 플러그인 생성 및 호스팅

이 게시물은 플러그인 개발에 관한 것이 아닙니다. 지금 시작하는 경우를 대비하여 WordPress 플러그인 핸드북을 자유롭게 공부하십시오.

개발이 완료되면 공개 URL(예: www.businessbloomer.com/blabla/whatever-plugin.zip )에 플러그인 ZIP 파일을 저장합니다.

2단계: JSON 변경 로그 파일 생성

플러그인을 자체 호스팅할 때 WordPress(및 플러그인이 설치된 모든 WordPress 웹사이트)에 사용 가능한 새 버전이 있음을 알려야 합니다. 그렇지 않으면 4단계에서 찾은 코드가 트리거되지 않습니다.

변경 로그 데이터를 저장하는 여러 가지 방법을 사용할 수 있으며 JSON 파일을 만드는 것이 가장 쉬운 방법입니다. WordPress에 필요한 모든 것은 ZIP 파일 이름과 플러그인 버전을 검색하여 동적으로 가져오고 업데이트 알림을 트리거할 수 있도록 하는 것입니다.

텍스트 편집기를 열고 다음 정보를 입력합니다.

 {
	"plugin_name": "우커머스용 플러그인",
	"latest_version": "1.0.9",
	"download_url": "https://www.businessbloomer.com/blabla/whatever-plugin.zip",
}

그런 다음 파일을 .JSON 확장자로 저장하고 자신의 웹사이트의 특정 URL(예: www.businessbloomer.com/blabla/plugin-updates.json )에 저장합니다.

새 플러그인 버전을 출시할 때마다 이 파일을 업데이트하십시오. 예 를 들어 플러그인 버전 2.0.0을 업로드하는 즉시 JSON 파일을 다음으로 변경하십시오 .

 {
	"plugin_name": "우커머스용 플러그인",
	"latest_version": "2.0.0",
	"download_url": "https://www.businessbloomer.com/blabla/whatever-plugin.zip",
}

3단계: WordPress 사이트에 사용자 지정 플러그인 설치

WordPress > 플러그인 > 새로 추가 > 업로드로 이동하여 사용자 지정 플러그인을 설치하고 활성화합니다. 이 플러그인은 버전 번호(예: 1.0.9)와 함께 제공됩니다. 이제 관리자가 최신 버전을 사용할 수 있는 경우 플러그인을 업데이트할 수 있는 방법을 찾아야 합니다.

4단계: PHP 스니펫 – WordPress 대시보드에서 사용자 정의 플러그인 업데이트

이것은 멋진 부분입니다.

이것을 플러그인 코드에 추가할 수 있습니다.

update_plugins_{$hostname}plugins_api 의 두 가지 필터를 사용합니다. 전자는 실제 업데이트를 담당합니다. 후자는 " 버전 세부 정보 보기 "를 클릭하면 플러그인 정보를 표시합니다(위 스크린샷 참조).

참고 1: {$hostname} 부분은 플러그인을 호스팅하는 위치를 기반으로 합니다. 플러그인 URL이 www.businessbloomer.com/blabla/whatever-plugin-1.0.9.zip 이고 {$hostname} 이 www.businessbloomer.com이라고 가정해 보겠습니다.

참고 2: 일반적으로 동일한 플러그인 폴더의 이름과 플러그인 파일의 이름 도 알아야 합니다. ZIP 파일이 every-plugin.zip 인 경우 플러그인 폴더는 /whatever-plugin 이고 포함된 플러그인 파일은 /whatever-plugin.php 라고 예상합니다.

참고 3: 플러그인 파일은 " Plugin URI " 및 " Version " 헤더 매개변수를 사용해야 합니다. 코드를 통해 검색하기 때문입니다.

/**
 * @snippet       Update Self-Hosted Plugin @ WordPress Dashboard
 * @how-to        Get CustomizeWoo.com FREE
 * @author        Rodolfo Melogli
 * @compatible    WooCommerce 7
 * @donate $9     https://businessbloomer.com/bloomer-armada/
 */

// ----------------
// 1: Plugin Description When People Click On View Version Details
// Note: use the plugin slug, path, name 

add_filter( 'plugins_api', 'bbloomer_plugin_view_version_details', 9999, 3 );

function bbloomer_plugin_view_version_details( $res, $action, $args ) {
	if ( 'plugin_information' !== $action ) return $res;
	if ( $args->slug !== 'whatever-plugin' ) return $res;
	$res = new stdClass();
	$res->name = 'Whatever Plugin For WooCommerce';
	$res->slug = 'whatever-plugin';
	$res->path = 'whatever-plugin/whatever-plugin.php';
   $res->sections = array(
		'description' => 'The plugin description',
	);
   $changelog = bbloomer_whatever_plugin_request();
	$res->version = $changelog->latest_version;
	$res->download_link = $changelog->download_url;	
	return $res;
}

// ----------------
// 2: Plugin Update
// Note: use the plugin {$hostname}, slug & path 

add_filter( 'update_plugins_www.businessbloomer.com', function( $update, array $plugin_data, string $plugin_file, $locales ) {
	 if ( $plugin_file !== 'whatever-plugin/whatever-plugin.php' ) return $update;
    if ( ! empty( $update ) ) return $update;
    $changelog = bbloomer_whatever_plugin_request();
    if ( ! version_compare( $plugin_data['Version'], $changelog->latest_version, '<' ) ) return $update;
    return [
        'slug' => 'whatever-plugin',
        'version' => $changelog->latest_version,
        'url' => $plugin_data['PluginURI'],
        'package' => $changelog->download_url,
    ];	
}, 9999, 4 );

// ----------------
// 3: Retrieve Plugin Changelog
// Note: use the public JSON file address

function bbloomer_whatever_plugin_request() {
    $access = wp_remote_get( 'https://www.businessbloomer.com/blabla/plugin-updates.json', array( 'timeout' => 10,	'headers' => array( 'Accept' => 'application/json' )	) );
    if ( ! is_wp_error( $access ) && 200 === wp_remote_retrieve_response_code( $access ) ) {
			$result = json_decode( wp_remote_retrieve_body( $access ) );
			return $result;		
    }
}

요약

WordPress 사용자가 다른 곳에서 호스팅하는 플러그인을 업데이트하도록 하려면 다음이 필요합니다.

  1. 1단계(이름 지정) 및 4단계(플러그인 업데이트 요구 사항)에 따라 플러그인 개발
  2. 공개 URL에 ZIP 파일을 저장하여 WordPress에서 다운로드할 수 있도록 합니다.
  3. 공개 URL에 JSON 변경 로그 파일을 보관하여 WordPress에서 사용 가능한 업데이트가 있는지 알 수 있도록 합니다.

질문? 의심? 피드백? 아래에 의견을 남겨주세요!