From addc9bb7b347e4b3b05d7ec8f9a2b2cb3f2d1f91 Mon Sep 17 00:00:00 2001 From: changwoo Date: Fri, 3 Dec 2021 15:51:57 +0900 Subject: [PATCH] Version bumped to 0.4.1 --- CHANGELOG | 9 + README.md | 209 ++++++++++++------ assets/img/nss-logo.xcf | Bin 193820 -> 204680 bytes assets/img/pocket.png | Bin 0 -> 1146 bytes assets/js/front.js | 3 + composer.json | 2 +- includes/functions.php | 2 + includes/modules/class-nss-front.php | 4 +- includes/modules/class-nss-registers.php | 2 - includes/modules/class-nss-setup.php | 2 +- .../class-nss-register-uninstall.php | 21 -- index.php | 4 +- languages/nss-ko_KR.mo | Bin 4839 -> 4869 bytes languages/nss-ko_KR.po | 10 +- languages/nss.pot | 10 +- 15 files changed, 176 insertions(+), 102 deletions(-) create mode 100644 assets/img/pocket.png delete mode 100644 includes/registers/class-nss-register-uninstall.php diff --git a/CHANGELOG b/CHANGELOG index ef2717c..6683de7 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,12 @@ +0.4.1 +----- +2021-12-03 +- New service added: Pocket +- Fix fatal error when using shortcode 'nss' without any parameters. +- Minor code fixes. +- README update. + + 0.4.0 ----- 2021-11-29 diff --git a/README.md b/README.md index d1d734a..05db33f 100644 --- a/README.md +++ b/README.md @@ -2,39 +2,39 @@ 워드프레스 포스트를 손쉽게 공유해 주는 플러그인입니다. - ## 사용법 + 여타 플러그인처럼 설치 후 활성화시키면 됩니다. 관리자 > 소셜 공유 메뉴로 이동하여 적절히 설정하면 됩니다. - ## 개발 가이드 -나란 소셜 공유 플러그인은 플러그인 활성화시 즉시 모든 기능을 안락하게 사용가능한 사용자 친화적인 플러그인이기보다는, -개발자가 자신의 커스텀된 워드프레스 웹사이트를 제작하면서, 자신의 사이트의 tone & manner, look & feel 에 맞춰 자유롭게 변형하는 것이 가능한 -소셜 공유 플러그인으로 기획하였습니다. -따라서 좀더 개발자-친화적인 이 플러그인을 잘 사용하기 위해서는 이 플러그인이 가지고 있는 여러 개발적인 요소들을 잘 파악하는 것이 중요합니다. -그러므로 여기서는 소셜 공유 커스텀에 도움이 될 사항들을 정리하여 소개합니다. +나란 소셜 공유 플러그인은 플러그인 활성화시 즉시 모든 기능을 안락하게 사용가능한 사용자 친화적인 플러그인이기보다는, 개발자가 자신의 커스텀된 워드프레스 웹사이트를 제작하면서, 자신의 사이트의 tone & +manner, look & feel 에 맞춰 자유롭게 변형하는 것이 가능한 소셜 공유 플러그인으로 기획하였습니다. + +따라서 좀더 개발자-친화적인 이 플러그인을 잘 사용하기 위해서는 이 플러그인이 가지고 있는 여러 개발적인 요소들을 잘 파악하는 것이 중요합니다. 그러므로 여기서는 소셜 공유 커스텀에 도움이 될 사항들을 정리하여 +소개합니다. ### 템플릿 오버라이드 -`includes/templates/buttons.php`는 플러그인의 기본 소셜 공유 링크(버튼) 출력을 위한 템플릿입니다. -템플릿은 HTML 출력을 위한 부분으로 사이트의 복잡한 로직은 제거하고, HTML 코드 출력에만 전념하기 위한 장치입니다. -가급적 이 곳에는 HTML 구문을 출력하기 위한 용도로 사용하며, PHP 코드도 단지 PHP 변수 출력을 위해서만 사용하는 방향이 좋습니다. +`includes/templates/buttons.php`는 플러그인의 기본 소셜 공유 링크(버튼) 출력을 위한 템플릿입니다. -플러그인에 있는 `includes/templates/buttons.php`는 단지 예시일 뿐입니다. -이 템플릿을 수정해야 할 때는 직접 파일을 수정하지 말고, 오버라이드하세요. +템플릿은 HTML 출력을 위한 부분으로 사이트의 복잡한 로직은 제거하고, HTML 코드 출력에만 전념하기 위한 장치입니다. 가급적 이 곳에는 HTML 구문을 출력하기 위한 용도로 사용하며, PHP 코드도 단지 PHP +변수 출력을 위해서만 사용하는 방향이 좋습니다. +플러그인에 있는 `includes/templates/buttons.php`는 단지 예시일 뿐입니다. 이 템플릿을 수정해야 할 때는 직접 파일을 수정하지 말고, 오버라이드하세요. #### 예시: buttons 템플릿을 오버라이드하는 방법 + 1. 테마 디렉토리에 'nss'라는 디렉토리를 만들고 'buttons.php' 파일을 복사합니다. 2. 복사한 `{theme}/nss/buttons.php` 를 수정합니다. 플러그인은 이 파일을 발견하면 이것을 우선적으로 읽어들일 것입니다. 3. 즉, 플러그인의 `includes/templates/` 후의 경로와 테마의 `{theme}/nss/` 후의 경로가 서로 일치해야 합니다. - ### buttons 템플릿 설명 + buttons 템플릿 상단에 다음과 같은 주석이 발견될 것입니다. + ```php __( 'Facebook', 'nss' ), @@ -80,12 +79,13 @@ $all_avail = [ ``` #### $available 예시 + ```php $available = ['facebook', 'twitter', 'clipboard']; ``` - #### $icons 예시 + ``` $icons = [ 'facebook' => 'https://sample.com/wp-content/plugins/naran-social-login/assets/img/facebook.png', @@ -98,93 +98,98 @@ $icons = [ ]; ``` - ### 숏코드 -만약 특정 페이지에서 기본으로 저장된 설정과는 다른 설정으로 공유 버튼을 출력해야 한다면, 숏코드를 사용하여 -그 페이지만을 위한 소셜 공유 버튼을 출력할 수 있습니다. -숏코드와 그 셋팅은 관리자 > 설정 > 표시 > 숏코드 가이드에서 참고하시면 됩니다. +만약 특정 페이지에서 기본으로 저장된 설정과는 다른 설정으로 공유 버튼을 출력해야 한다면, 숏코드를 사용하여 그 페이지만을 위한 소셜 공유 버튼을 출력할 수 있습니다. +숏코드와 그 셋팅은 관리자 > 설정 > 표시 > 숏코드 가이드에서 참고하시면 됩니다. ### template과 variant -숏코드 가이드에서 'template'과 'variant'라는 항목을 찾을 수 있을 것입니다. -이것은 get_template_part()의 개념과 유사합니다. +숏코드 가이드에서 'template'과 'variant'라는 항목을 찾을 수 있을 것입니다. -만약 숏코드에서 기본 템플릿 'buttons'이 아닌 다른 템플릿, 예를 들어 `{template}/nss/share-icons.php` 같이 전혀 새로운 파일을 만들고, -이것을 사용하기를 원한다면 template에 'share-icons'를 입력하면 됩니다. +이것은 get_template_part()의 개념과 유사합니다. -variant는 기본 템플릿의 변형입니다. 예를 들어 특정 페이지 타입을 위한 'share-icons'의 변형이 필요한 경우, -이 변형의 이름을 'page155'라고 이름짓는다고 생각해봅니다. 그러면 우리는 `{template}/nss/share-icons-page155.php` 파일을 생성하고, -template에 'share-icons' 그대로, variant에 'page155'를 입력하는 것입니다. +만약 숏코드에서 기본 템플릿 'buttons'이 아닌 다른 템플릿, 예를 들어 `{template}/nss/share-icons.php` 같이 전혀 새로운 파일을 만들고, 이것을 사용하기를 원한다면 +template에 'share-icons'를 입력하면 됩니다. -물론 기본 템플릿 자체를 `share-icons-page155`라고 이름지어도 불러오는데는 전혀 문제가 없습니다. -그러나 이렇게 기본-변형 식으로 이름을 분절하여 입력하면 이점이 있습니다. +variant는 기본 템플릿의 변형입니다. 예를 들어 특정 페이지 타입을 위한 'share-icons'의 변형이 필요한 경우, 이 변형의 이름을 'page155'라고 이름짓는다고 생각해봅니다. 그러면 +우리는 `{template}/nss/share-icons-page155.php` 파일을 생성하고, template에 'share-icons' 그대로, variant에 'page155'를 입력하는 것입니다. -가령,`{template}/nss/share-icons-page155.php` 파일이 발견되지 않는 경우, -기본 템플릿 `{template}/nss/share-icons.php`을 대신 불러오게 할 수 있기 때문입니다. +물론 기본 템플릿 자체를 `share-icons-page155`라고 이름지어도 불러오는데는 전혀 문제가 없습니다. 그러나 이렇게 기본-변형 식으로 이름을 분절하여 입력하면 이점이 있습니다. -이를 잘 활용하면 대안(fallback)을 제공하는 템플릿으로 응용 가능합니다. 숏코드 같은 고정된 문자열에서는 다소 활용도가 떨어질 수 있으나, -사실 이는 NSS_Template_Impl::render() 메소드에서 사용하는 방식을 그대로 따라한 것에 불과합니다. -동적인 요소들을 variant로 설정하고 액션이나 필터의 콜백에서 사용하는 경우에는 유용할 수 있습니다. +가령,`{template}/nss/share-icons-page155.php` 파일이 발견되지 않는 경우, 기본 템플릿 `{template}/nss/share-icons.php`을 대신 불러오게 할 수 있기 +때문입니다. +이를 잘 활용하면 대안(fallback)을 제공하는 템플릿으로 응용 가능합니다. 숏코드 같은 고정된 문자열에서는 다소 활용도가 떨어질 수 있으나, 사실 이는 NSS_Template_Impl::render() +메소드에서 사용하는 방식을 그대로 따라한 것에 불과합니다. 동적인 요소들을 variant로 설정하고 액션이나 필터의 콜백에서 사용하는 경우에는 유용할 수 있습니다. ### 액션 목록 #### nss_initialized + 소셜 공유 플러그인이 모두 초기화되고 난 후 호출되는 액션입니다. 추가 초기화 코드를 설정할 수 있습니다. #### nss_prepare_settings + 소셜 공유 플러그인 관리자 페이지에서 설정 필드들을 모두 준비하고 난 후 호출하는 액션입니다. 추가 필드를 설정할 수 있습니다. #### nss_before_buttons_wrap + div.nss-buttons-wrap 요소 이전에 호출되어, 프론트에서 소셜 공유 버튼 출력 이전에 내용을 추가하고 싶을 때 사용할 수 있습니다. 단, 이 액션은 템플릿에 위치합니다. 만약 오버라이드된 템플릿에서 누락시키면 호출되지 않을 것입니다. #### nss_before_buttons_list + div.nss-buttons-wrap 요소가 열린 다음, 버튼 목록이 출력되기 이전에 호출됩니다. 단, 이 액션은 템플릿에 위치합니다. 만약 오버라이드된 템플릿에서 누락시키면 호출되지 않을 것입니다. #### nss_after_buttons_list + 버튼 목록이 출력된 후, div.nss-buttons-wrap 요소가 닫히기 전 호출됩니다. 단, 이 액션은 템플릿에 위치합니다. 만약 오버라이드된 템플릿에서 누락시키면 호출되지 않을 것입니다. #### nss_after_buttons_wrap + div.nss-buttons-wrap 요소가 닫히고 난 후 호출됩니다. 프론트에서 소셜 공유 버튼 출력 다음에 내용을 추가하고 싶을 때 사용할 수 있습니다. 단, 이 액션은 템플릿에 위치합니다. 만약 오버라이드된 템플릿에서 누락시키면 호출되지 않을 것입니다. #### nss_before_option_form + 관리자 설정 페이지에서 form 태그 출력 전에 호출됩니다. #### nss_after_settings_fields + 관리자 설정 페이지에서 form 내부에 여러 form 제어를 위한 숨김 요소를 출력한 후 호출됩니다. #### nss_after_do_settings_sections + 관리자 설정 페이지에서 소셜 로그인의 설정 필드를 모두 출력하고 난 후, 저장 버튼이 출력되기 전 호출됩니다. #### nss_after_option_form -관리자 설정 페이지에서 form 요소를 닫고 난 후 호출됩니다. + +관리자 설정 페이지에서 form 요소를 닫고 난 후 호출됩니다. ### 필터 목록 #### nss_script_debug + SCRIPT_DEBUG 상수 상태를 필터하는 역할입니다. #### nss_locate_file_paths -템플릿 경로를 결정할 때 후보가 되는 경로들을 우선순위로 나열한 배열입니다. -경로 배열과 캐시 이름 2개를 인자로 받습니다. -1. 경로 배열: 경로의 목록. 우선순위가 높을수록 먼저 나열됩니다. - 경로의 우선순위는 차일드 템플릿 > 부모 템플릿 > 플러그인 순입니다. +템플릿 경로를 결정할 때 후보가 되는 경로들을 우선순위로 나열한 배열입니다. 경로 배열과 캐시 이름 2개를 인자로 받습니다. + +1. 경로 배열: 경로의 목록. 우선순위가 높을수록 먼저 나열됩니다. 경로의 우선순위는 차일드 템플릿 > 부모 템플릿 > 플러그인 순입니다. 2. 캐시 이름: "{템플릿_타입}:{템플릿_이름}:{변형}:{확장자}"의 문자열입니다. - * 템플릿 타입: 일반적인 템플릿이면, 'template'으로 고정된 문자열입니다. - * 템플릿 이름: render() 함수 호출시 넣은 $relpath 인수입니다. - * 변경: $variant 인수입니다. 기본은 공백입니다. - * 확장자: $ext 인수입니다. 기본은 'php'입니다. + * 템플릿 타입: 일반적인 템플릿이면, 'template'으로 고정된 문자열입니다. + * 템플릿 이름: render() 함수 호출시 넣은 $relpath 인수입니다. + * 변경: $variant 인수입니다. 기본은 공백입니다. + * 확장자: $ext 인수입니다. 기본은 'php'입니다. 템플릿 경로의 후보를 추가할 때 사용할 수 있습니다. @@ -206,8 +211,8 @@ function my_override_locate_file_paths( $paths, $cache_name ) { ``` #### nss_located_path -우선순위에 의해 템플릿이 결정된 후, 결정된 템플릿을 완전히 뒤집을 수 있는 필터입니다. -총 5개의 인수를 요구합니다. + +우선순위에 의해 템플릿이 결정된 후, 결정된 템플릿을 완전히 뒤집을 수 있는 필터입니다. 총 5개의 인수를 요구합니다. 1. 발견된 경로: 읽을 템플릿 파일의 경로 2. 템플릿 타입 @@ -215,7 +220,6 @@ function my_override_locate_file_paths( $paths, $cache_name ) { 4. 변형 5. 확장자 - ```php add_filter( 'nss_located_path', 'my_override_located_path', 10, 5 ); @@ -228,7 +232,8 @@ function my_override_locate_file_paths( $path, $template_name, $relpath, $varian } ``` -### nss_available_services +#### nss_available_services + 플러그인이 제공할 수 있는 모든 소셜 공유 서비스의 목록을 필터합니다. ```php @@ -242,7 +247,8 @@ function my_override_available_services( $services ) { } ``` -### nss_icon_sets +#### nss_icon_sets + 플러그인의 아이콘 셋 목록을 필터합니다. ```php @@ -257,35 +263,104 @@ function my_override_nss_icon_sets( $icons ) { // dark 아이콘 셋 추가. $icons['dark'] = [ - 'facebook' => $img_url . 'dark-facebook.png', - 'twitter' => $img_url . 'dark-twitter.png', - 'linkedIn' => $img_url . 'dark-linked-in.png', - 'telegram' => $img_url . 'dark-telegram.png', - 'kakaoTalk' => $img_url . 'dark-kakao-talk.png', - 'naverBlog' => $img_url . 'dark-naver-blog.png', - 'clipboard' => $img_url . 'dark-share.png', - 'myService' => $img_url . 'dark-my-service.png', + 'clipboard' => $img_url . 'share.png', + 'facebook' => $img_url . 'facebook.png', + 'kakaoStory' => $img_url . 'kakao-story.png', + 'kakaoTalk' => $img_url . 'kakao-talk.png', + 'line' => $img_url . 'line.png', + 'linkedIn' => $img_url . 'linked-in.png', + 'naverBlog' => $img_url . 'naver-blog.png', + 'pinterest' => $img_url . 'pinterest.png', + 'pocket' => $img_url . 'pocket.png', + 'telegram' => $img_url . 'telegram.png', + 'twitter' => $img_url . 'twitter.png', + 'myService' => $img_url . 'dark-my-service.png', // myService ]; return $icons; } ``` -### nss_sharable +#### nss_sharable + 소셜 공유 페이지를 출력할지를 결정하는 필터입니다. +#### nss_share_params -### nss_share_params -소셜 공유 페이지를 출력하기 위한 자바스크립트의 옵션 값을 필터합니다. -필터하는 대상은 연관 배열이며, 이 배열은 다음처럼 구성되어 있습니다. +소셜 공유 페이지를 출력하기 위한 자바스크립트의 옵션 값을 필터합니다. 필터하는 대상은 연관 배열이며, 이 배열은 다음처럼 구성되어 있습니다. * title: 포스트의 제목입니다. * thumbnail: 포스트의 대표 이미지가 있다면, URL을 저장하고 있습니다. * permalink: 이 포스트의 URL입니다. +#### nss_buttons_context + +'buttons' 템플릿을 출력하기 위한 콘텍스트 변수를 필터합니다. 빌터하는 대상은 연관 배열입니다. 이 배열의 키는 템플릿에서 변수로 사용됩니다. + +'buttons 템플릿 설명' 부분을 참고하세요. + +#### nss_front_css + +프론트의 CSS 스타일시트 URL을 변경할 수 있습니다. + +```php +// My Service 아이콘 및 변곃된 아이콘 셋 추가. +add_filter( 'nss_front_css', 'my_override_nss_front_css' ); + +function my_override_nss_front_css( $url ) { + $url = plugins_url( 'style.css', MYPLUGINMAIN ); // URL 변경. + return $url; +} +``` + +## 플러그인에서 커스텀 소셜 공유 서비스를 추가하기 예제 -### nss_buttons_context -'buttons' 템플릿을 출력하기 위한 콘텍스트 변수를 필터합니다. -빌터하는 대상은 연관 배열입니다. 이 배열의 키는 템플릿에서 변수로 사용됩니다. +서비스 항목을 추가합니다. 이 때 `nss_available_services` 필터를 사용합니다. -'buttons 템플릿 설명' 부분을 참고하세요. \ No newline at end of file +```php +add_filter( 'nss_available_services', 'my_nss_services' ); +function my_nss_services( $services ) { + $services['myService'] = 'MyService'; + return $services; +} +``` + +서비스에 사용할 아이콘을 추가합니다. 이 때 `nss_icon_sets`를 사용합니다. + +```php +add_filter( 'nss_icon_sets', 'my_nss_icon_sets' ); +function my_nss_icon_sets( $icon_sets ) { + $img_url = plugin_dir_url( MY_MAIN_FILE ) . 'icons'; + foreach( array_keys( $icon_sets ) as $type ) { + $icon_sets[ $type ]['myService'] = "$img_url/$type-my-service.png"; + } + return $icon_sets; +} +``` + +1. '관리자 > 나란 소셜 공유 > 가능한 서비스'에 추가한 항목이 보이는지 확인합니다. 체크하여 활성화시킵니다. +2. '관리자 > 나란 소셜 공유 > 아이콘셋'에 추가한 항목 아이콘이 보이는지 확인합니다. +3. 프론트에서 소셜 공유 버튼이 출력될 때 추가한 서비스의 아이콘이 출력되는지 확인합니다. + +아이콘이 출력되면, 아이콘이 클릭되었을 때 이벤트를 추가해야 합니다. 아래처럼 추가 자바스크립트를 작성합니다. + +```javascript +(function () { + document.addEventListener('DOMContentLoaded', function () { + setTimeout(function () { + sharer.myService = function (s) { + sharer.openPopup('https://sample-service.com/share?url=' + encodeURIComponent(s.permalink)); + }; + }, 100); + }); +})(); +``` + +이 자바스크립트 파일을 enqueue 합니다. + +```php +add_action( 'nss_after_buttons_wrap', 'my_nss_enqueue_js' ); +function my_nss_enqueue_js() { + wp_enqueue_script( 'my-nss-script', plugins_url( 'script.js', MY_MAIN_FILE ), ['nss-front'] ); +} +``` diff --git a/assets/img/nss-logo.xcf b/assets/img/nss-logo.xcf index a1ef1cc9a983964623a0ffc38c715bb019cf9c83..79d09df540260daa5b6b117d4ce5b802df02fa28 100644 GIT binary patch delta 12499 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 M07*qoM6N<$g5vY{EC2ui literal 0 HcmV?d00001 diff --git a/assets/js/front.js b/assets/js/front.js index a02d937..16506c0 100644 --- a/assets/js/front.js +++ b/assets/js/front.js @@ -93,6 +93,9 @@ window.PinUtils.pinAny(); } }, + pocket(s) { + this.openPopup('https://widgets.getpocket.com/v1/popup?url=' + encodeURIComponent(s.permalink)); + }, telegram(s) { this.openPopup('https://t.me/share/url?url=' + encodeURIComponent(s.permalink) + '&text=' + encodeURIComponent(s.title)) }, diff --git a/composer.json b/composer.json index d3793e9..2cb4569 100644 --- a/composer.json +++ b/composer.json @@ -49,7 +49,7 @@ "php": "^7.4", "ext-json": "*" }, - "version": "0.4.0", + "version": "0.4.1", "require-dev": { "phpunit/phpunit": "^7" }, diff --git a/includes/functions.php b/includes/functions.php index e749b96..d32bbe2 100644 --- a/includes/functions.php +++ b/includes/functions.php @@ -21,6 +21,7 @@ function nss_get_available_services(): array { 'linkedIn' => __( 'LinkedIn', 'nss' ), 'naverBlog' => __( 'Naver Blog', 'nss' ), 'pinterest' => __( 'Pinterest', 'nss' ), + 'pocket' => __( 'Pocket', 'nss' ), 'telegram' => __( 'Telegram', 'nss' ), 'twitter' => __( 'Twitter', 'nss' ), ] ); @@ -47,6 +48,7 @@ function nss_get_icon_sets(): array { 'linkedIn' => $img_url . 'linked-in.png', 'naverBlog' => $img_url . 'naver-blog.png', 'pinterest' => $img_url . 'pinterest.png', + 'pocket' => $img_url . 'pocket.png', 'telegram' => $img_url . 'telegram.png', 'twitter' => $img_url . 'twitter.png', ], diff --git a/includes/modules/class-nss-front.php b/includes/modules/class-nss-front.php index 5f9ca57..620cffe 100644 --- a/includes/modules/class-nss-front.php +++ b/includes/modules/class-nss-front.php @@ -78,13 +78,13 @@ public function is_sharable(): bool { * * @callback * - * @param array|string $atts + * @param array|string $atts An empty string when the shortcode is used without parameters. * * @return string * @see NSS_Register_Shortcode::get_items() */ public function handle_shortcode( $atts ): string { - return is_singular() ? $this->render_buttons( $atts ) : ''; + return $this->render_buttons( $atts ?: [] ); } /** diff --git a/includes/modules/class-nss-registers.php b/includes/modules/class-nss-registers.php index ca8d50e..f4e4b5f 100644 --- a/includes/modules/class-nss-registers.php +++ b/includes/modules/class-nss-registers.php @@ -18,7 +18,6 @@ * @property-read NSS_Register_Script $script * @property-read NSS_Register_Shortcode $shortcode * @property-read NSS_Register_Style $style - * @property-read NSS_Register_Uninstall $uninstall */ class NSS_Registers implements NSS_Module { use NSS_Submodule_Impl; @@ -33,7 +32,6 @@ public function __construct() { 'script' => NSS_Register_Script::class, 'shortcode' => NSS_Register_Shortcode::class, 'style' => NSS_Register_Style::class, - 'uninstall' => function () { return new NSS_Register_Uninstall(); }, ] ); } diff --git a/includes/modules/class-nss-setup.php b/includes/modules/class-nss-setup.php index 9ff71a4..d58726f 100644 --- a/includes/modules/class-nss-setup.php +++ b/includes/modules/class-nss-setup.php @@ -165,7 +165,7 @@ function ( string $item ) { $output['post_types'] = array_unique( array_filter( array_map( - function ( $v ) { return sanitize_key( $v ); }, + 'sanitize_key', (array) ( $_POST[ $option_name ]['post_types'] ?? [] ) ) ) diff --git a/includes/registers/class-nss-register-uninstall.php b/includes/registers/class-nss-register-uninstall.php deleted file mode 100644 index 36f294f..0000000 --- a/includes/registers/class-nss-register-uninstall.php +++ /dev/null @@ -1,21 +0,0 @@ -option->delete(); - } - ); - } - } -} diff --git a/index.php b/index.php index 37f3ee9..bb7f4e8 100644 --- a/index.php +++ b/index.php @@ -3,7 +3,7 @@ * Plugin Name: Naran Social Share * Plugin URI: https://github.com/chwnam/naran-social-share * Description: Share your posts to social media, and so on. - * Version: 0.4.0 + * Version: 0.4.1 * Requires at least: 4.4.0 * Requires PHP: 7.4 * Author: changwoo @@ -23,7 +23,7 @@ require_once __DIR__ . '/vendor/autoload.php'; const NSS_MAIN_FILE = __FILE__; -const NSS_VERSION = '0.4.0'; +const NSS_VERSION = '0.4.1'; const NSS_PRIORITY = 885; nss(); diff --git a/languages/nss-ko_KR.mo b/languages/nss-ko_KR.mo index ae146e411cb009df757cd18cc1c1d7b85aca1c96..b4e3d2fdbd769e9729b970deefd48e6727715b90 100644 GIT binary patch delta 1288 zcmXxkPe{{Y9LMp;{eDZ+bT!MRR$Jvv%bA;+Qwy}BgZ+UpD55`;SO`WQ1S_a^kO+$C zFd9V=1w}+&+UPLyu!G0!5D9juV22{IPF?CCy+8BmVc*~Dd7j_z`TzUvTlhwE>a*Xy zXGnX94TS44W*8S8E~L2Em~!mJMjXUVcp6vWRrKSOHG{_}zrdBagwaQOe zFJ<p10*ss0n;U4fqG^(P5NI+=!}gK^J4FetOW) z_-25NRyJ%MM>V{S5zL@Em__km9m`8R5XhnR&Xa27Sdd0dYdaW&qw_4jcN<;SS@Sv-uD%ufBEKuu%> zQ<}+jGFQrsd5KzCn2S1&p&mSlI>S+{#YyWeyiEBK@-qP*(sNB*x-o`yX-07iPM{{5 zLFQzhSF``8$h@*QYIqUUQPA3kT5&J(h#9~-JYvg93{##!?a%{M`)O3Wye$`SE#*1X zQ5UUCHSE7u)Zkmb(T@Dg5EpfD5;gFMbsV=+zJ^-K6I-7}4O~FAn?p_P18OJ!qQ>c< z(H-26dj5TijJDznCh$8p;1CC>j*_VR7chd8sFggm_wyK_TtFSg0w(Y%+o7}0qK@zl zw&4PD(xu7i3-{_<-j)981gpDLB$WEo^=>ew?^Q`J+h(Gf2og#iM2P4lSX^nB;;7U| zY$q72^eOkE24`+&ClMw7Cw)0unBEWVkakyzMS0AQblwe?wWdG1jnSUvdb8Wwj@nwK z79vJy=lK6Bt$155?0x8Q&W$B=Gv#AWWh~Os8H#rIb;Wbhs#@23cY1Lqo!jes=KKS1 CPj6-b delta 1272 zcmXZcKTMNB9LDjZeSrd&Y5_rOELJI0TH$S}2hVcN;U9}q$l<+d`vh9Cs`ugAXu+71RJtJcJ*y2U|FR+o=10AwP3Kp#Umm7ln2dGF6IRm@l}}p z*M&cHXrK@;f*e4tIDuR;DLjhPw!MTSw2P=6dW3pz9rfIXZNI~Q+MB2&ZdrFx3kpWq ze_a^lKy)TK3I&|A7VtFf5^AE4ZGR0Fa03NDXs^zZl~`WDoUMLw;%#HqJtyX#|KD#eTD31zwmyn3S$h~DYwgKK gzP%o3Y\n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2021-11-29T11:24:32+09:00\n" +"POT-Creation-Date: 2021-12-03T15:47:41+09:00\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "X-Generator: WP-CLI 2.5.0\n" "X-Domain: nss\n" @@ -82,10 +82,14 @@ msgid "Pinterest" msgstr "" #: includes/functions.php:24 -msgid "Telegram" +msgid "Pocket" msgstr "" #: includes/functions.php:25 +msgid "Telegram" +msgstr "" + +#: includes/functions.php:26 msgid "Twitter" msgstr ""