Plugin Directory

Changeset 3656070


Ignore:
Timestamp:
08/20/2026 07:05:59 AM (2 months ago)
Author:
artgrafy
Message:

Release 1.5.2

Location:
clickblog
Files:
5 added
12 edited

Legend:

Unmodified
Added
Removed
  • clickblog/trunk/assets/css/admin.css

    r3636017 r3656070  
    194194    color: #64748b;
    195195    margin-top: 6px;
     196}
     197/* 연동된 ClickBlog 계정. 상태 배지 바로 아래에 오므로 시각적 무게를 한 단계 낮춘다. */
     198.clickblog-status-account {
     199    display: flex;
     200    align-items: center;
     201    gap: 4px;
     202    font-size: 12px;
     203    color: #334155;
     204    margin-top: 8px;
     205    word-break: break-all;
     206}
     207.clickblog-status-account .dashicons {
     208    font-size: 14px;
     209    width: 14px;
     210    height: 14px;
     211    color: #94a3b8;
     212    flex-shrink: 0;
    196213}
    197214.clickblog-divider {
  • clickblog/trunk/clickblog.php

    r3646544 r3656070  
    11<?php
    22/**
    3  * Plugin Name:       ClickBlog AI Auto Poster
     3 * Plugin Name:       ClickBlog AI Blog Poster
    44 * Description:       Generate SEO-ready blog posts and featured images with the ClickBlog AI engine, and publish them to WordPress in one click. Requires a free ClickBlog.net account.
    5  * Version:           1.5.1
     5 * Version:           1.5.2
    66 * Requires at least: 5.8
    77 * Requires PHP:      7.4
    … …  
    2424 * Rename this for your plugin and update it as you release new versions.
    2525 */
    26 define( 'CLICKBLOG_VERSION', '1.5.1' );
     26define( 'CLICKBLOG_VERSION', '1.5.2' );
    2727define( 'CLICKBLOG_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
    2828define( 'CLICKBLOG_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
    … …  
    128128        wp_unschedule_hook( ClickBlog_Jobs::CRON_HOOK );
    129129
    130         // Flush rewrite rules if needed
    131         flush_rewrite_rules();
     130        // ⚠️ flush_rewrite_rules() 를 부르지 않는다. 이 플러그인은 재작성 규칙을
     131        //    등록하지 않으므로 부를 이유가 없고, 워드프레스 핸드북도 규칙을 등록하지
     132        //    않는 플러그인은 호출하지 말라고 명시한다(무의미한 재생성 비용만 든다).
    132133    }
    133134}
  • clickblog/trunk/includes/class-clickblog-admin.php

    r3646544 r3656070  
    11<?php
    22/**
    3  * ClickBlog AI Auto Poster — admin screens (settings, AI writing studio).
     3 * ClickBlog AI Blog Poster — admin screens (settings, AI writing studio).
    44 *
    55 * @package ClickBlog
    … …  
    3838
    3939        add_menu_page(
    40             __( 'ClickBlog AI Auto Poster', 'clickblog' ),
     40            __( 'ClickBlog AI Blog Poster', 'clickblog' ),
    4141            __( 'ClickBlog', 'clickblog' ),
    4242            'manage_options',
    … …  
    174174        // 드물게 동기적으로 완료되어 돌아온 경우는 이 자리에서 바로 게시한다.
    175175        if ( is_array( $data ) && ! empty( $data['success'] ) && ! empty( $data['content'] ) && ( empty( $data['post_id'] ) || empty( $data['status'] ) || 'completed' === $data['status'] ) ) {
    176             $jobs->publish( $data, $body_arr, $job_id );
     176            $published = $jobs->publish( $data, $body_arr, $job_id );
     177
     178            // 게시하지 못했으면 성공으로 돌려보내지 않는다. 화면이 "성공했습니다"를
     179            // 띄우고 글은 없는 상태가 되어, 크레딧만 쓴 사용자가 원인을 알 수 없게 된다.
     180            if ( is_wp_error( $published ) ) {
     181                wp_send_json_error( array( 'error' => ClickBlog_Jobs::publish_error_message( $published ) ) );
     182            }
    177183        }
    178184
    … …  
    274280        if ( isset( $clean['language'] ) && ! isset( self::supported_languages()[ $clean['language'] ] ) ) {
    275281            $clean['language'] = self::default_language();
     282        }
     283
     284        // 화풍도 지원 목록 안이어야 한다. 작성 언어와 같은 이유다 —
     285        // AIHub 가 모르는 키는 오류가 아니라 **기본 프롬프트로 조용히 떨어진다.**
     286        if ( isset( $clean['image_style'] ) && ! isset( self::supported_image_styles()[ $clean['image_style'] ] ) ) {
     287            $clean['image_style'] = self::default_image_style();
    276288        }
    277289
    … …  
    372384            delete_option( 'clickblog_credits' );
    373385            delete_option( 'clickblog_connected_at' );
     386            delete_option( 'clickblog_account_email' );
    374387
    375388            add_settings_error( 'clickblog_messages', 'clickblog_disconnected', __( 'The connection has been removed.', 'clickblog' ), 'updated' );
    … …  
    394407                if ( isset( $api_response['data']['current_credits'] ) ) {
    395408                    update_option( 'clickblog_credits', absint( $api_response['data']['current_credits'] ) );
     409                }
     410
     411                // 어느 ClickBlog 계정에 붙었는지 화면에 보여주기 위해 보관한다.
     412                // 같은 워드프레스에 다른 계정의 키를 넣었을 때 그 사실을 알 방법이
     413                // 지금까지 없었다(화면은 "연동됨" 만 말했다).
     414                //
     415                // ⚠️ 이메일은 handshake 응답에만 실려 온다. user-info(화면을 열 때마다
     416                //    부르는 경로)에는 없으므로, 이미 연동해 둔 사이트는 [Save & Test
     417                //    Connection] 을 한 번 눌러야 채워진다. 그전까지는 표시하지 않는다.
     418                if ( ! empty( $api_response['data']['email'] ) ) {
     419                    update_option( 'clickblog_account_email', sanitize_email( $api_response['data']['email'] ) );
    396420                }
    397421
    … …  
    489513    }
    490514
     515    /**
     516     * 대표 이미지 화풍.
     517     *
     518     * ⚠️ 정본은 AIHub 의 `generator.IMAGE_STYLE_MAP` 이다. 여기 없는 키를 보내면
     519     * AIHub 가 **오류 없이 기본 프롬프트로 떨어진다** — 사용자가 고른 화풍이
     520     * 조용히 사라지고 아무도 눈치채지 못한다. 실제로 그런 상태였다:
     521     * 플러그인에만 있던 `3d`·`anime` 는 AIHub 가 모르는 값이라 무시됐고,
     522     * AIHub 에 있는 `watercolor`·`cinematic`·`minimal` 은 고를 수조차 없었다.
     523     *
     524     * 라벨은 ClickBlog.net 웹 화면과 같은 문구로 맞춘다. 같은 기능을 두 화면이
     525     * 다르게 부르면 사용자가 다른 기능으로 오해한다.
     526     *
     527     * @return array<string,string> 화풍 키 => 표시 이름
     528     */
     529    public static function supported_image_styles() {
     530        return array(
     531            'flat'       => __( 'Flat Illustration', 'clickblog' ),
     532            'realistic'  => __( 'Realistic', 'clickblog' ),
     533            'watercolor' => __( 'Watercolor', 'clickblog' ),
     534            'cinematic'  => __( 'Cinematic', 'clickblog' ),
     535            'minimal'    => __( 'Minimal', 'clickblog' ),
     536        );
     537    }
     538
     539    /** 화풍을 고르지 않았거나 모르는 값일 때 쓸 기본값. */
     540    public static function default_image_style() {
     541        return 'flat';
     542    }
     543
    491544    public static function get_costs() {
    492545        $stored = get_option( 'clickblog_costs', array() );
    … …  
    555608                    'Content-Type'  => 'application/json',
    556609                    'Authorization' => 'Bearer ' . $api_key,
     610                    // 서버가 이 경로에서도 플러그인 버전을 수집한다. 빠뜨리면
     611                    // 스로틀에 걸려 설치본 버전을 영영 못 보는 구간이 생긴다.
     612                    'User-Agent'    => 'ClickBlog-WPPlugin/' . CLICKBLOG_VERSION,
    557613                ),
    558614                'body'      => wp_json_encode( array( 'site_url' => get_site_url() ) ),
    … …  
    598654            delete_option( 'clickblog_credits' );
    599655            delete_option( 'clickblog_connected_at' );
     656            delete_option( 'clickblog_account_email' );
    600657
    601658            // 이 함수는 화면 렌더링 도중 호출되고 settings_errors() 출력이 그 뒤에 오므로
    … …  
    626683        $connected_at = get_option( 'clickblog_connected_at', '' );
    627684        $user_credits = get_option( 'clickblog_credits', 0 );
     685        $account_mail = get_option( 'clickblog_account_email', '' );
    628686
    629687        if ( empty( $api_key ) ) {
    … …  
    641699            $is_connected = (bool) get_option( 'clickblog_is_connected', false );
    642700            $api_key      = get_option( 'clickblog_api_key', '' );
     701            $account_mail = get_option( 'clickblog_account_email', '' );
    643702        }
    644703
    … …  
    681740                    </div>
    682741                    <div class="clickblog-brand-name">
    683                         <h2>ClickBlog AI Auto Poster</h2>
     742                        <h2>ClickBlog AI Blog Poster</h2>
    684743                        <span class="clickblog-version-badge">v<?php echo esc_html( CLICKBLOG_VERSION ); ?></span>
    685744                    </div>
    … …  
    862921                                </label>
    863922                                <select id="cb_image_style" class="clickblog-select">
    864                                     <option value="flat"><?php esc_html_e( 'Flat graphic (illustration)', 'clickblog' ); ?></option>
    865                                     <option value="realistic"><?php esc_html_e( 'Realistic photo', 'clickblog' ); ?></option>
    866                                     <option value="3d"><?php esc_html_e( '3D render', 'clickblog' ); ?></option>
    867                                     <option value="anime"><?php esc_html_e( 'Anime / comic', 'clickblog' ); ?></option>
     923                                <?php foreach ( self::supported_image_styles() as $cb_style_key => $cb_style_label ) : ?>
     924                                    <option value="<?php echo esc_attr( $cb_style_key ); ?>" <?php selected( $cb_style_key, self::default_image_style() ); ?>>
     925                                        <?php echo esc_html( $cb_style_label ); ?>
     926                                    </option>
     927                                <?php endforeach; ?>
    868928                                </select>
    869929                            </div>
    … …  
    11281188                                    <?php esc_html_e( 'Connected', 'clickblog' ); ?>
    11291189                                </div>
     1190                                <?php if ( ! empty( $account_mail ) ) : ?>
     1191                                    <p class="clickblog-status-account">
     1192                                        <span class="dashicons dashicons-admin-users"></span>
     1193                                        <?php
     1194                                        /* translators: %s: the ClickBlog.net account this site is connected to. */
     1195                                        echo esc_html( sprintf( __( 'Connected as %s', 'clickblog' ), $account_mail ) );
     1196                                        ?>
     1197                                    </p>
     1198                                <?php endif; ?>
    11301199                                <?php if ( ! empty( $connected_at ) ) : ?>
    11311200                                    <p class="clickblog-status-time">
  • clickblog/trunk/includes/class-clickblog-api.php

    r3646544 r3656070  
    100100    }
    101101
    102     public static function send_handshake_ping( $api_key ) {
    103         $api = self::get_instance();
    104         $res = $api->send_handshake( $api_key );
    105         return array(
    106             'success' => $res['success'],
    107             'message' => $res['success'] ? ( $res['data']['message'] ?? '' ) : ( $res['error'] ?? '' ),
    108         );
    109     }
    110 
    111102    /**
    112103     * Tell ClickBlog that this site is disconnecting.
  • clickblog/trunk/includes/class-clickblog-jobs.php

    r3636017 r3656070  
    11<?php
    22/**
    3  * ClickBlog AI Auto Poster — background job watcher.
     3 * ClickBlog AI Blog Poster — background job watcher.
    44 *
    55 * 생성 작업을 지켜보는 주체를 브라우저에서 워드프레스로 옮긴다.
    … …  
    329329        }
    330330
    331         $this->publish( $data, $request, $job_id );
     331        $published = $this->publish( $data, $request, $job_id );
     332
     333        // 글이 실제로 만들어졌을 때만 완료로 확정한다.
     334        //
     335        // 예전에는 게시 실패를 그대로 흘려보내고 무조건 completed 로 끝냈다. 그래서
     336        // 화면은 "성공했습니다"를 띄우는데 글은 어디에도 없는 상태가 됐다 —
     337        // 크레딧은 이미 차감된 뒤라 사용자로서는 원인을 알 방법이 없었다.
     338        //
     339        // ⚠️ 여기서 재시도하지 않는다. 본문을 보관하지 않으므로 다시 게시하려면 서버에
     340        //    또 물어봐야 하는데, 그 사이 다른 경로가 게시를 시도하면 중복 게시 방어를
     341        //    한 겹 더 시험하게 된다. 실패를 정직하게 알리는 편이 안전하다.
     342        if ( is_wp_error( $published ) ) {
     343            return $this->finish(
     344                $job_id,
     345                'failed',
     346                array(
     347                    'success' => false,
     348                    'status'  => 'failed',
     349                    'error'   => self::publish_error_message( $published ),
     350                )
     351            );
     352        }
    332353
    333354        return $this->finish( $job_id, 'completed', $data );
    … …  
    543564     * @param array  $request 게시 설정(상태·카테고리 등).
    544565     * @param string $job_id  작업 번호(중복 게시 판별용).
     566     * @return int|WP_Error 글 번호, 또는 게시하지 못한 이유.
    545567     */
    546568    public function publish( &$data, $request, $job_id = '' ) {
    … …  
    550572            $data['post_id'] = $existing;
    551573            $data['link']    = get_permalink( $existing );
    552             return;
     574            return $existing;
    553575        }
    554576
    … …  
    560582
    561583        if ( '' === trim( $content ) ) {
    562             return;
     584            return new WP_Error( 'clickblog_empty_content', __( 'The server returned an empty post.', 'clickblog' ) );
    563585        }
    564586
    … …  
    631653        if ( is_wp_error( $inserted_id ) ) {
    632654            wp_set_current_user( $previous_user );
    633             return;
     655            return $inserted_id;
    634656        }
    635657
    … …  
    638660
    639661        // 대표 이미지 첨부까지 글쓴이 컨텍스트를 유지한다(첨부물의 소유자가 되도록).
    640         $this->attach_featured_image( $inserted_id, $data, $title );
     662        $image_result = $this->attach_featured_image( $inserted_id, $data, $title );
    641663
    642664        wp_set_current_user( $previous_user );
     665
     666        // 대표 이미지 실패는 글 게시를 되돌릴 이유가 아니다 — 본문이 훨씬 크고,
     667        // 이미지 하나 때문에 글을 통째로 잃는 것이 사용자에게 더 큰 손해다.
     668        //
     669        // 그렇다고 조용히 넘어가서도 안 된다. 이미지 몫 크레딧은 이미 쓰였고
     670        // 서버는 이미지를 정상 전달했으므로 환불도 되지 않는다. 알리지 않으면
     671        // 사용자는 "왜 이미지가 없지" 만 남는다 — 게시 실패를 성공이라 말하던
     672        // 것과 같은 종류의 침묵이다.
     673        if ( is_wp_error( $image_result ) ) {
     674            $notice = sprintf(
     675                /* translators: %s: WordPress error message explaining why the image could not be attached. */
     676                __( 'The post was published, but the featured image could not be attached: %s', 'clickblog' ),
     677                $image_result->get_error_message()
     678            );
     679
     680            $existing        = isset( $data['message'] ) ? trim( (string) $data['message'] ) : '';
     681            $data['message'] = '' !== $existing ? $existing . ' ' . $notice : $notice;
     682        }
     683
     684        return $inserted_id;
     685    }
     686
     687    /**
     688     * 게시 실패를 사용자에게 보여줄 한 문장으로 만든다.
     689     *
     690     * 화면 폴링 경로와 즉시 완료 경로가 같은 문구를 써야 하므로 여기서 한 번만 만든다.
     691     *
     692     * @param WP_Error $error 게시가 실패한 이유.
     693     * @return string
     694     */
     695    public static function publish_error_message( $error ) {
     696        return sprintf(
     697            /* translators: %s: WordPress error message explaining why the post could not be saved. */
     698            __( 'The post was generated but WordPress could not save it: %s', 'clickblog' ),
     699            $error->get_error_message()
     700        );
    643701    }
    644702
    … …  
    658716     * @param array  $data    ClickBlog.net 응답.
    659717     * @param string $title   글 제목(첨부 설명으로 쓴다).
     718     * @return true|WP_Error 붙였거나 붙일 것이 없으면 true, 실패하면 이유.
    660719     */
    661720    private function attach_featured_image( $post_id, $data, $title ) {
     721        // 애초에 이미지를 요청하지 않았거나 서버가 보내지 않은 경우다.
     722        // 서버가 못 만든 경우의 크레딧 회수는 서버 쪽 부분 환불이 맡는다.
    662723        if ( empty( $data['featured_image_url'] ) ) {
    663             return;
     724            return true;
    664725        }
    665726
    … …  
    668729        require_once ABSPATH . 'wp-admin/includes/image.php';
    669730
     731        // ⚠️ 일부 공유 호스팅은 워드프레스에서 나가는 외부 HTTPS 요청을 막는다.
     732        //    그런 사이트에서는 여기서 실패하고, 글만 이미지 없이 올라간다.
    670733        $tmp = download_url( $data['featured_image_url'], 15 );
    671734
    672735        if ( is_wp_error( $tmp ) ) {
    673             return;
     736            return $tmp;
    674737        }
    675738
    … …  
    693756        if ( is_wp_error( $attachment_id ) ) {
    694757            wp_delete_file( $tmp );
    695             return;
     758            return $attachment_id;
    696759        }
    697760
    698761        set_post_thumbnail( $post_id, $attachment_id );
     762
     763        return true;
    699764    }
    700765}
  • clickblog/trunk/languages/clickblog.pot

    r3640058 r3656070  
    1 # Copyright (C) 2026 ClickBlog.net
    2 # This file is distributed under the GPL-2.0-or-later license.
     1# Copyright (C) ClickBlog.net
     2# This file is distributed under the same license as the ClickBlog AI Blog Poster plugin.
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: ClickBlog AI Auto Poster 1.4.0\n"
    6 "Report-Msgid-Bugs-To: https://clickblog.net/\n"
    7 "POT-Creation-Date: 2026-07-29T00:00:00+00:00\n"
     5"Project-Id-Version: ClickBlog AI Blog Poster\n"
    86"MIME-Version: 1.0\n"
    97"Content-Type: text/plain; charset=UTF-8\n"
    108"Content-Transfer-Encoding: 8bit\n"
    11 "Language-Team: ClickBlog.net\n"
    12 "X-Generator: clickblog-make-pot\n"
    139"X-Domain: clickblog\n"
    1410
    15 #: includes/class-clickblog-admin.php:37
    16 msgid "ClickBlog AI Auto Poster"
    17 msgstr ""
    18 
    19 #: includes/class-clickblog-admin.php:38
     11#: includes/class-clickblog-admin.php:40
     12msgid "ClickBlog AI Blog Poster"
     13msgstr ""
     14
     15#: includes/class-clickblog-admin.php:41
    2016msgid "ClickBlog"
    2117msgstr ""
    2218
    23 #: includes/class-clickblog-admin.php:76 includes/class-clickblog-admin.php:661
     19#: includes/class-clickblog-admin.php:86 includes/class-clickblog-admin.php:995
    2420msgid "(Text %1$dC + featured image %2$dC)"
    2521msgstr ""
    2622
    27 #: includes/class-clickblog-admin.php:77
     23#: includes/class-clickblog-admin.php:88
    2824msgid "(Text %dC)"
    2925msgstr ""
    3026
    31 #: includes/class-clickblog-admin.php:78
     27#: includes/class-clickblog-admin.php:89
    3228msgid "No ClickBlog API key is registered. Please add your key on the Connection & Settings tab first."
    3329msgstr ""
    3430
    35 #: includes/class-clickblog-admin.php:79
     31#: includes/class-clickblog-admin.php:90
    3632msgid "Please enter a topic for your post."
    3733msgstr ""
    3834
    39 #: includes/class-clickblog-admin.php:80
     35#: includes/class-clickblog-admin.php:91
    4036msgid "Error: "
    4137msgstr ""
    4238
    43 #: includes/class-clickblog-admin.php:81
     39#: includes/class-clickblog-admin.php:92
    4440msgid "Your post was generated and published successfully."
    4541msgstr ""
    4642
    47 #: includes/class-clickblog-admin.php:82
     43#: includes/class-clickblog-admin.php:93
    4844msgid "Remaining credits: "
    4945msgstr ""
    5046
    51 #: includes/class-clickblog-admin.php:83
     47#: includes/class-clickblog-admin.php:94 includes/class-clickblog-jobs.php:259
    5248msgid "Post generation timed out."
    5349msgstr ""
    5450
    55 #: includes/class-clickblog-admin.php:84
     51#: includes/class-clickblog-admin.php:95
    5652msgid "An error occurred while checking the generation status."
    5753msgstr ""
    5854
    59 #: includes/class-clickblog-admin.php:85
     55#: includes/class-clickblog-admin.php:96 includes/class-clickblog-jobs.php:306
    6056msgid "AI post generation failed."
    6157msgstr ""
    6258
    63 #: includes/class-clickblog-admin.php:86
     59#: includes/class-clickblog-admin.php:97
    6460msgid "Post generation failed."
    6561msgstr ""
    6662
    67 #: includes/class-clickblog-admin.php:87
     63#: includes/class-clickblog-admin.php:98
    6864msgid "Could not reach the server"
    6965msgstr ""
    7066
    71 #: includes/class-clickblog-admin.php:97 includes/class-clickblog-admin.php:163 includes/class-clickblog-admin.php:226
     67#: includes/class-clickblog-admin.php:99
     68msgid "The AI is writing your post…"
     69msgstr ""
     70
     71#: includes/class-clickblog-admin.php:100
     72msgid "Picking up a post generation that was already running…"
     73msgstr ""
     74
     75#: includes/class-clickblog-admin.php:102
     76msgid "Elapsed %s"
     77msgstr ""
     78
     79#: includes/class-clickblog-admin.php:103
     80msgid "m"
     81msgstr ""
     82
     83#: includes/class-clickblog-admin.php:104
     84msgid "s"
     85msgstr ""
     86
     87#: includes/class-clickblog-admin.php:114 includes/class-clickblog-admin.php:198 includes/class-clickblog-admin.php:352
    7288msgid "You do not have permission to do this."
    7389msgstr ""
    7490
    75 #: includes/class-clickblog-admin.php:104 includes/class-clickblog-admin.php:170
     91#: includes/class-clickblog-admin.php:121 includes/class-clickblog-admin.php:202 includes/class-clickblog-jobs.php:482
    7692msgid "No API key has been configured."
    7793msgstr ""
    7894
    79 #: includes/class-clickblog-admin.php:146 includes/class-clickblog-admin.php:212 includes/class-clickblog-api.php:82
     95#: includes/class-clickblog-admin.php:160 includes/class-clickblog-api.php:82
    8096msgid "Could not connect to the ClickBlog server."
    8197msgstr ""
    8298
    83 #: includes/class-clickblog-admin.php:246
     99#: includes/class-clickblog-admin.php:209
     100msgid "No generation job was specified."
     101msgstr ""
     102
     103#: includes/class-clickblog-admin.php:388
    84104msgid "The connection has been removed."
    85105msgstr ""
    86106
    87 #: includes/class-clickblog-admin.php:271
     107#: includes/class-clickblog-admin.php:429
    88108msgid "Connected to ClickBlog.net successfully."
    89109msgstr ""
    90110
    91 #: includes/class-clickblog-admin.php:280
     111#: includes/class-clickblog-admin.php:438
    92112msgid "Could not connect to the ClickBlog server: "
    93113msgstr ""
    94114
    95 #: includes/class-clickblog-admin.php:286
     115#: includes/class-clickblog-admin.php:444
    96116msgid "Settings saved."
    97117msgstr ""
    98118
    99 #: includes/class-clickblog-admin.php:356
     119#: includes/class-clickblog-admin.php:531
     120msgid "Flat Illustration"
     121msgstr ""
     122
     123#: includes/class-clickblog-admin.php:532
     124msgid "Realistic"
     125msgstr ""
     126
     127#: includes/class-clickblog-admin.php:533
     128msgid "Watercolor"
     129msgstr ""
     130
     131#: includes/class-clickblog-admin.php:534
     132msgid "Cinematic"
     133msgstr ""
     134
     135#: includes/class-clickblog-admin.php:535
     136msgid "Minimal"
     137msgstr ""
     138
     139#: includes/class-clickblog-admin.php:663
    100140msgid "The saved API key is no longer valid. It may have been revoked or reissued on ClickBlog.net. Please issue a new key and register it again."
    101141msgstr ""
    102142
    103 #: includes/class-clickblog-admin.php:439 includes/class-clickblog-admin.php:668
     143#: includes/class-clickblog-admin.php:750 includes/class-clickblog-admin.php:1006
    104144msgid "Credits:"
    105145msgstr ""
    106146
    107 #: includes/class-clickblog-admin.php:455
     147#: includes/class-clickblog-admin.php:766
    108148msgid "AI Writing Studio"
    109149msgstr ""
    110150
    111 #: includes/class-clickblog-admin.php:459
     151#: includes/class-clickblog-admin.php:770
    112152msgid "Connection & Settings"
    113153msgstr ""
    114154
    115 #: includes/class-clickblog-admin.php:473
     155#: includes/class-clickblog-admin.php:784
    116156msgid "Generate an AI post and publish it to WordPress in one click"
    117157msgstr ""
    118158
    119 #: includes/class-clickblog-admin.php:476
     159#: includes/class-clickblog-admin.php:787
    120160msgid "Create high-quality posts and images with the ClickBlog AI engine and publish them without leaving WordPress."
    121161msgstr ""
    122162
    123 #: includes/class-clickblog-admin.php:483
     163#: includes/class-clickblog-admin.php:794
    124164msgid "Connect your ClickBlog account to start generating posts."
    125165msgstr ""
    126166
    127 #: includes/class-clickblog-admin.php:485
     167#: includes/class-clickblog-admin.php:796
    128168msgid "Go to connection settings"
    129169msgstr ""
    130170
    131 #: includes/class-clickblog-admin.php:495
     171#: includes/class-clickblog-admin.php:806
    132172msgid "1. Topic or one-line summary *"
    133173msgstr ""
    134174
    135 #: includes/class-clickblog-admin.php:501
     175#: includes/class-clickblog-admin.php:812
    136176msgid "e.g. Best seaside cafes to visit in Jeju this summer"
    137177msgstr ""
    138178
    139 #: includes/class-clickblog-admin.php:505
     179#: includes/class-clickblog-admin.php:816
    140180msgid "The AI writes a search- and click-friendly post based on this summary."
    141181msgstr ""
    142182
    143 #: includes/class-clickblog-admin.php:512
     183#: includes/class-clickblog-admin.php:823
    144184msgid "2. Focus keywords (comma separated)"
    145185msgstr ""
    146186
    147 #: includes/class-clickblog-admin.php:518
     187#: includes/class-clickblog-admin.php:829
    148188msgid "e.g. jeju travel, seaside cafe, local food"
    149189msgstr ""
    150190
    151 #: includes/class-clickblog-admin.php:525
     191#: includes/class-clickblog-admin.php:836
    152192msgid "3. Target length"
    153193msgstr ""
    154194
    155 #: includes/class-clickblog-admin.php:528
     195#: includes/class-clickblog-admin.php:839
    156196msgid "Medium (about 1,500 characters) - recommended"
    157197msgstr ""
    158198
    159 #: includes/class-clickblog-admin.php:529
     199#: includes/class-clickblog-admin.php:840
    160200msgid "Short (about 800 characters)"
    161201msgstr ""
    162202
    163 #: includes/class-clickblog-admin.php:530
     203#: includes/class-clickblog-admin.php:841
    164204msgid "Long (about 2,500 characters)"
    165205msgstr ""
    166206
    167 #: includes/class-clickblog-admin.php:531
     207#: includes/class-clickblog-admin.php:842
    168208msgid "Custom"
    169209msgstr ""
    170210
    171 #: includes/class-clickblog-admin.php:534
     211#: includes/class-clickblog-admin.php:845
    172212msgid "Characters (200-5000)"
    173213msgstr ""
    174214
    175 #: includes/class-clickblog-admin.php:541
     215#: includes/class-clickblog-admin.php:852
    176216msgid "4. Language"
    177217msgstr ""
    178218
    179 #: includes/class-clickblog-admin.php:544
    180 msgid "Korean"
    181 msgstr ""
    182 
    183 #: includes/class-clickblog-admin.php:545
    184 msgid "English"
    185 msgstr ""
    186 
    187 #: includes/class-clickblog-admin.php:546
    188 msgid "Japanese"
    189 msgstr ""
    190 
    191 #: includes/class-clickblog-admin.php:547
    192 msgid "Chinese"
    193 msgstr ""
    194 
    195 #: includes/class-clickblog-admin.php:554
     219#: includes/class-clickblog-admin.php:878
    196220msgid "5. Tone and writing style"
    197221msgstr ""
    198222
    199 #: includes/class-clickblog-admin.php:557
     223#: includes/class-clickblog-admin.php:881
    200224msgid "Informative (clear and professional)"
    201225msgstr ""
    202226
    203 #: includes/class-clickblog-admin.php:558
     227#: includes/class-clickblog-admin.php:882
    204228msgid "Conversational (blog / social tone)"
    205229msgstr ""
    206230
    207 #: includes/class-clickblog-admin.php:559
     231#: includes/class-clickblog-admin.php:883
    208232msgid "Persuasive (drives conversions)"
    209233msgstr ""
    210234
    211 #: includes/class-clickblog-admin.php:560
     235#: includes/class-clickblog-admin.php:884
    212236msgid "Analytical (report / column tone)"
    213237msgstr ""
    214238
    215 #: includes/class-clickblog-admin.php:561
     239#: includes/class-clickblog-admin.php:885
    216240msgid "Storytelling (essay / personal experience)"
    217241msgstr ""
    218242
    219 #: includes/class-clickblog-admin.php:568
     243#: includes/class-clickblog-admin.php:892
    220244msgid "6. Number of sections"
    221245msgstr ""
    222246
    223 #: includes/class-clickblog-admin.php:571
     247#: includes/class-clickblog-admin.php:895
    224248msgid "5 sections (default)"
    225249msgstr ""
    226250
    227 #: includes/class-clickblog-admin.php:572
     251#: includes/class-clickblog-admin.php:896
    228252msgid "3 sections"
    229253msgstr ""
    230254
    231 #: includes/class-clickblog-admin.php:573
     255#: includes/class-clickblog-admin.php:897
    232256msgid "4 sections"
    233257msgstr ""
    234258
    235 #: includes/class-clickblog-admin.php:574
     259#: includes/class-clickblog-admin.php:898
    236260msgid "6 sections"
    237261msgstr ""
    238262
    239 #: includes/class-clickblog-admin.php:575
     263#: includes/class-clickblog-admin.php:899
    240264msgid "7 sections"
    241265msgstr ""
    242266
    243 #: includes/class-clickblog-admin.php:576
     267#: includes/class-clickblog-admin.php:900
    244268msgid "8 sections"
    245269msgstr ""
    246270
    247 #: includes/class-clickblog-admin.php:583
     271#: includes/class-clickblog-admin.php:907
    248272msgid "7. Post design style"
    249273msgstr ""
    250274
    251 #: includes/class-clickblog-admin.php:586
     275#: includes/class-clickblog-admin.php:910
    252276msgid "Basic (classic)"
    253277msgstr ""
    254278
    255 #: includes/class-clickblog-admin.php:587
     279#: includes/class-clickblog-admin.php:911
    256280msgid "Modern (clean)"
    257281msgstr ""
    258282
    259 #: includes/class-clickblog-admin.php:588
     283#: includes/class-clickblog-admin.php:912
    260284msgid "Minimal (compact)"
    261285msgstr ""
    262286
    263 #: includes/class-clickblog-admin.php:589
     287#: includes/class-clickblog-admin.php:913
    264288msgid "Magazine (editorial)"
    265289msgstr ""
    266290
    267 #: includes/class-clickblog-admin.php:596
     291#: includes/class-clickblog-admin.php:920
    268292msgid "8. Featured image style"
    269293msgstr ""
    270294
    271 #: includes/class-clickblog-admin.php:599
    272 msgid "Flat graphic (illustration)"
    273 msgstr ""
    274 
    275 #: includes/class-clickblog-admin.php:600
    276 msgid "Realistic photo"
    277 msgstr ""
    278 
    279 #: includes/class-clickblog-admin.php:601
    280 msgid "3D render"
    281 msgstr ""
    282 
    283 #: includes/class-clickblog-admin.php:602
    284 msgid "Anime / comic"
    285 msgstr ""
    286 
    287 #: includes/class-clickblog-admin.php:609
     295#: includes/class-clickblog-admin.php:934
    288296msgid "9. Post status"
    289297msgstr ""
    290298
    291 #: includes/class-clickblog-admin.php:612
     299#: includes/class-clickblog-admin.php:937
    292300msgid "Publish immediately"
    293301msgstr ""
    294302
    295 #: includes/class-clickblog-admin.php:613
     303#: includes/class-clickblog-admin.php:938
    296304msgid "Draft"
    297305msgstr ""
    298306
    299 #: includes/class-clickblog-admin.php:614
     307#: includes/class-clickblog-admin.php:939
    300308msgid "Pending review"
    301309msgstr ""
    302310
    303 #: includes/class-clickblog-admin.php:615
     311#: includes/class-clickblog-admin.php:940
    304312msgid "Private"
    305313msgstr ""
    306314
    307 #: includes/class-clickblog-admin.php:622
     315#: includes/class-clickblog-admin.php:947
    308316msgid "10. Category"
    309317msgstr ""
    310318
    311 #: includes/class-clickblog-admin.php:625
     319#: includes/class-clickblog-admin.php:950
    312320msgid "Default (Uncategorized)"
    313321msgstr ""
    314322
    315 #: includes/class-clickblog-admin.php:639
     323#: includes/class-clickblog-admin.php:964
    316324msgid "11. Add an inline table of contents"
    317325msgstr ""
    318326
    319 #: includes/class-clickblog-admin.php:643
     327#: includes/class-clickblog-admin.php:968
    320328msgid "12. Include a FAQ section"
    321329msgstr ""
    322330
    323 #: includes/class-clickblog-admin.php:647
     331#: includes/class-clickblog-admin.php:975
    324332msgid "13. Generate an AI featured image (+%d C)"
    325333msgstr ""
    326334
    327 #: includes/class-clickblog-admin.php:658
     335#: includes/class-clickblog-admin.php:989
    328336msgid "Credits to be used:"
    329337msgstr ""
    330338
    331 #: includes/class-clickblog-admin.php:672
     339#: includes/class-clickblog-admin.php:1010
    332340msgid "Top up"
    333341msgstr ""
    334342
    335 #: includes/class-clickblog-admin.php:683
     343#: includes/class-clickblog-admin.php:1021
    336344msgid "Generate and publish with AI"
    337345msgstr ""
    338346
    339 #: includes/class-clickblog-admin.php:692
     347#: includes/class-clickblog-admin.php:1030
    340348msgid "The AI is writing your post and creating images. This usually takes 15-30 seconds."
    341349msgstr ""
    342350
    343 #: includes/class-clickblog-admin.php:704
     351#: includes/class-clickblog-admin.php:1036
     352msgid "You can leave this page — WordPress keeps watching and publishes the post as soon as it is ready."
     353msgstr ""
     354
     355#: includes/class-clickblog-admin.php:1048
    344356msgid "Edit in WordPress"
    345357msgstr ""
    346358
    347 #: includes/class-clickblog-admin.php:708
     359#: includes/class-clickblog-admin.php:1052
    348360msgid "View post"
    349361msgstr ""
    350362
    351 #: includes/class-clickblog-admin.php:721
     363#: includes/class-clickblog-admin.php:1065
    352364msgid "Get started in 3 steps"
    353365msgstr ""
    354366
    355 #: includes/class-clickblog-admin.php:726
     367#: includes/class-clickblog-admin.php:1070
    356368msgid "Get your API key from ClickBlog.net"
    357369msgstr ""
    358370
    359 #: includes/class-clickblog-admin.php:728
     371#: includes/class-clickblog-admin.php:1072
    360372msgid "Free bonus credits are granted on your first connection."
    361373msgstr ""
    362374
    363 #: includes/class-clickblog-admin.php:731
     375#: includes/class-clickblog-admin.php:1075
    364376msgid "Get your API key"
    365377msgstr ""
    366378
    367 #: includes/class-clickblog-admin.php:735
     379#: includes/class-clickblog-admin.php:1079
    368380msgid "No account yet? Sign up for free"
    369381msgstr ""
    370382
    371 #: includes/class-clickblog-admin.php:742
     383#: includes/class-clickblog-admin.php:1086
    372384msgid "Paste the key into the field below"
    373385msgstr ""
    374386
    375 #: includes/class-clickblog-admin.php:743
     387#: includes/class-clickblog-admin.php:1087
    376388msgid "Use the Copy key button on the ClickBlog.net plugin page."
    377389msgstr ""
    378390
    379 #: includes/class-clickblog-admin.php:748
     391#: includes/class-clickblog-admin.php:1092
    380392msgid "Click Save & Test Connection and you are ready"
    381393msgstr ""
    382394
    383 #: includes/class-clickblog-admin.php:749
     395#: includes/class-clickblog-admin.php:1093
    384396msgid "Once connected, you go straight to the writing screen."
    385397msgstr ""
    386398
    387 #: includes/class-clickblog-admin.php:764
     399#: includes/class-clickblog-admin.php:1108
    388400msgid "ClickBlog secret API key"
    389401msgstr ""
    390402
    391 #: includes/class-clickblog-admin.php:776
     403#: includes/class-clickblog-admin.php:1120
    392404msgid "An API key is saved. Leave this field empty to keep it."
    393405msgstr ""
    394406
    395 #: includes/class-clickblog-admin.php:785
     407#: includes/class-clickblog-admin.php:1129
    396408msgid "Enter a new key only to replace the saved one"
    397409msgstr ""
    398410
    399 #: includes/class-clickblog-admin.php:790
     411#: includes/class-clickblog-admin.php:1134
    400412msgid "Enter the secret API key issued on the ClickBlog.net plugin page."
    401413msgstr ""
    402414
    403 #: includes/class-clickblog-admin.php:792
     415#: includes/class-clickblog-admin.php:1136
    404416msgid "Get or view your key"
    405417msgstr ""
    406418
    407 #: includes/class-clickblog-admin.php:798
     419#: includes/class-clickblog-admin.php:1142
    408420msgid "Default author"
    409421msgstr ""
    410422
    411 #: includes/class-clickblog-admin.php:809
     423#: includes/class-clickblog-admin.php:1153
    412424msgid "Choose the account used as the author of posts published by ClickBlog."
    413425msgstr ""
    414426
    415 #: includes/class-clickblog-admin.php:814
     427#: includes/class-clickblog-admin.php:1158
    416428msgid "ClickBlog service URL"
    417429msgstr ""
    418430
    419 #: includes/class-clickblog-admin.php:826
     431#: includes/class-clickblog-admin.php:1170
    420432msgid "Save & Test Connection"
    421433msgstr ""
    422434
    423 #: includes/class-clickblog-admin.php:830
     435#: includes/class-clickblog-admin.php:1174
    424436msgid "Disconnect"
    425437msgstr ""
    426438
    427 #: includes/class-clickblog-admin.php:839
     439#: includes/class-clickblog-admin.php:1183
    428440msgid "Connection status"
    429441msgstr ""
    430442
    431 #: includes/class-clickblog-admin.php:844
     443#: includes/class-clickblog-admin.php:1188
    432444msgid "Connected"
    433445msgstr ""
    434446
    435 #: includes/class-clickblog-admin.php:848
     447#: includes/class-clickblog-admin.php:1195
     448msgid "Connected as %s"
     449msgstr ""
     450
     451#: includes/class-clickblog-admin.php:1203
    436452msgid "First connected: %s"
    437453msgstr ""
    438454
    439 #: includes/class-clickblog-admin.php:854
     455#: includes/class-clickblog-admin.php:1210
    440456msgid "Not connected"
    441457msgstr ""
    442458
    443 #: includes/class-clickblog-admin.php:857
     459#: includes/class-clickblog-admin.php:1213
    444460msgid "Follow the steps on the left to register your key and unlock post generation."
    445461msgstr ""
    446462
    447 #: includes/class-clickblog-admin.php:865
     463#: includes/class-clickblog-admin.php:1221
    448464msgid "Credits"
    449465msgstr ""
    450466
    451 #: includes/class-clickblog-admin.php:871
     467#: includes/class-clickblog-admin.php:1230
    452468msgid "Not enough for one post with an image (%dC)."
    453469msgstr ""
    454470
    455 #: includes/class-clickblog-admin.php:876
     471#: includes/class-clickblog-admin.php:1238
    456472msgid "Top up credits"
    457473msgstr ""
    458474
    459 #: includes/class-clickblog-admin.php:885
     475#: includes/class-clickblog-admin.php:1247
    460476msgid "Open ClickBlog dashboard"
    461477msgstr ""
    462478
    463 #: includes/class-clickblog-admin.php:890
     479#: includes/class-clickblog-admin.php:1252
    464480msgid "Reissue API key"
    465 msgstr ""
    466 
    467 #: includes/class-clickblog-admin.php:910
    468 msgid "AI post"
    469481msgstr ""
    470482
    … …  
    477489msgstr ""
    478490
    479 #: includes/class-clickblog-admin.php
    480 msgid "The AI is writing your post…"
    481 msgstr ""
    482 
    483 #: includes/class-clickblog-admin.php
    484 msgid "Picking up a post generation that was already running…"
    485 msgstr ""
    486 
    487 #. translators: %s: elapsed time, for example "1m 20s".
    488 #: includes/class-clickblog-admin.php
    489 msgid "Elapsed %s"
    490 msgstr ""
    491 
    492 #. translators: abbreviation for minutes, shown next to the elapsed time.
    493 #: includes/class-clickblog-admin.php
    494 msgid "m"
    495 msgstr ""
    496 
    497 #. translators: abbreviation for seconds, shown next to the elapsed time.
    498 #: includes/class-clickblog-admin.php
    499 msgid "s"
    500 msgstr ""
    501 
    502 #: includes/class-clickblog-admin.php
    503 msgid "You can leave this page — WordPress keeps watching and publishes the post as soon as it is ready."
    504 msgstr ""
    505 
    506 #: includes/class-clickblog-admin.php
    507 msgid "No generation job was specified."
    508 msgstr ""
    509 
    510 #: includes/class-clickblog-jobs.php
     491#: includes/class-clickblog-jobs.php:292
    511492msgid "The saved API key was rejected by ClickBlog.net."
    512493msgstr ""
     494
     495#: includes/class-clickblog-jobs.php:577
     496msgid "AI post"
     497msgstr ""
     498
     499#: includes/class-clickblog-jobs.php:584
     500msgid "The server returned an empty post."
     501msgstr ""
     502
     503#: includes/class-clickblog-jobs.php:676
     504msgid "The post was published, but the featured image could not be attached: %s"
     505msgstr ""
     506
     507#: includes/class-clickblog-jobs.php:698
     508msgid "The post was generated but WordPress could not save it: %s"
     509msgstr ""
  • clickblog/trunk/readme.txt

    r3648065 r3656070  
    33Tags: ai, auto post, autoblogging, content generation, seo
    44Requires at least: 5.8
    5 Tested up to: 7.0
     5Tested up to: 7.1
    66Requires PHP: 7.4
    7 Stable tag: 1.5.1
     7Stable tag: 1.5.2
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
    … …  
    3030
    3131This plugin is a client for the ClickBlog.net service and **requires a free ClickBlog.net account** plus an API key. AI generation consumes credits from your ClickBlog account. You can sign up at [clickblog.net](https://clickblog.net).
    32 
    33 == External services ==
    34 
    35 This plugin connects to the ClickBlog.net API to generate blog content and images. It is required for the plugin to function — without it, no content can be generated.
    36 
    37 **What is sent, and when**
    38 
    39 Data is transmitted only when you click the generate button on the plugin screen, or when you press "Save & Test Connection":
    40 
    41 * Your ClickBlog API key (to authenticate the request)
    42 * Your site URL (to identify which site the request belongs to)
    43 * The generation options you entered: topic, keywords, target length, language, tone, paragraph count, post style, image style, post status and category
    44 
    45 After you start a generation, the plugin checks whether that job has finished. These follow-up requests carry the same data as above plus the job identifier, and nothing else. They stop as soon as the post is delivered, the job fails, or 20 minutes have passed. They are scheduled through WP-Cron so that a post you already spent credits on is still published if you close the page. No new generation is ever started on its own.
    46 
    47 **What is received**
    48 
    49 The generated post title, body content, excerpt, and (if requested) a featured image, along with your remaining credit balance.
    50 
    51 **Where it goes**
    52 
    53 Requests are sent to `https://clickblog.net`. To produce the text and images, ClickBlog forwards your generation options to its AI processing service at `https://api.using.ai.kr`, which in turn uses Google's Gemini and Imagen APIs.
    54 
    55 No post content, visitor data, or personal information from your WordPress site is collected or transmitted beyond the options you enter on the plugin screen.
    56 
    57 * Service provider: ClickBlog.net
    58 * Terms of Service: https://clickblog.net/terms
    59 * Privacy Policy: https://clickblog.net/privacy
    6032
    6133== Installation ==
    … …  
    9365Published posts stay in WordPress as normal posts. Uninstalling removes only the plugin's own settings, including the stored API key.
    9466
     67== External services ==
     68
     69This plugin connects to the ClickBlog.net API to generate blog content and images. It is required for the plugin to function — without it, no content can be generated.
     70
     71**What is sent, and when**
     72
     73Data is transmitted only when you click the generate button on the plugin screen, or when you press "Save & Test Connection":
     74
     75* Your ClickBlog API key (to authenticate the request)
     76* Your site URL (to identify which site the request belongs to)
     77* The generation options you entered: topic, keywords, target length, language, tone, paragraph count, post style, image style, post status and category
     78
     79After you start a generation, the plugin checks whether that job has finished. These follow-up requests carry the same data as above plus the job identifier, and nothing else. They stop as soon as the post is delivered, the job fails, or 20 minutes have passed. They are scheduled through WP-Cron so that a post you already spent credits on is still published if you close the page. No new generation is ever started on its own.
     80
     81**What is received**
     82
     83The generated post title, body content, excerpt, and (if requested) a featured image, along with your remaining credit balance.
     84
     85**Where it goes**
     86
     87Requests are sent to `https://clickblog.net`. To produce the text and images, ClickBlog forwards your generation options to its AI processing service at `https://api.using.ai.kr`, which in turn uses Google's Gemini and Imagen APIs.
     88
     89No post content, visitor data, or personal information from your WordPress site is collected or transmitted beyond the options you enter on the plugin screen.
     90
     91* Service provider: ClickBlog.net
     92* Terms of Service: https://clickblog.net/terms
     93* Privacy Policy: https://clickblog.net/privacy
     94
    9595== Screenshots ==
    9696
    97 1. AI Writing Studio — enter a topic and generate a complete post.
    98 2. Connection settings — save your API key and check your credit balance.
     971. AI Writing Studio — pick your options and generate a complete post without leaving WordPress.
     982. A published post — featured image, table of contents and headings, written and published in one click.
     993. Twelve writing languages, with your site language selected by default.
     1004. The same structure in Spanish — headings, table of contents and FAQ follow the language you pick.
     1015. And in Korean.
     1026. Featured image styles, and the exact credit cost shown before you generate.
     1037. Connection & Settings — save your API key, choose the post author, and check your credit balance.
    99104
    100105== Changelog ==
     106
     107= 1.5.2 =
     108* The plugin now calls itself **ClickBlog AI Blog Poster** everywhere. The admin screen used the old name while the plugin directory already showed the new one.
     109* Fixed: when WordPress could not save a generated post, the screen still reported success and the post silently went missing. It now reports the failure and shows the reason WordPress gave.
     110* Fixed: the featured image styles now match what the ClickBlog engine actually supports. "3D render" and "Anime / comic" were silently ignored — the image was still generated, just not in the style you picked — and Watercolor, Cinematic and Minimal could not be picked at all. The list is now Flat Illustration, Realistic, Watercolor, Cinematic and Minimal, the same five offered on ClickBlog.net.
     111* The Connection & Settings tab now shows which ClickBlog.net account this site is connected to. Until now the screen only said "Connected", so there was no way to tell which account a key belonged to. Existing sites will see it after pressing Save & Test Connection once.
     112* Fixed: if the featured image could not be downloaded or added to the media library, the post was published without it and nothing was said — you spent the image credits and were left guessing. The result now says what happened and why. (Some hosts block outbound requests from WordPress, which is when this happens.)
     113* The plugin version is now included with every request to ClickBlog.net, so support can tell which version a site is running.
    101114
    102115= 1.5.1 =
    … …  
    161174== Upgrade Notice ==
    162175
     176= 1.5.2 =
     177Fixes a case where a failed post was reported as published. Update by replacing the plugin — do not delete it first, as deleting removes your saved API key.
     178
    163179= 1.5.1 =
    164180Disconnecting inside WordPress now updates your ClickBlog account too. Update by replacing the plugin — do not delete it first, as deleting removes your saved API key.
  • clickblog/trunk/uninstall.php

    r3636017 r3656070  
    1818delete_option( 'clickblog_saas_url' );
    1919delete_option( 'clickblog_connected_at' );
     20// 연동된 ClickBlog 계정 표시용.
     21delete_option( 'clickblog_account_email' );
    2022delete_option( 'clickblog_credits' );
    2123delete_option( 'clickblog_default_author' );
Note: See TracChangeset for help on using the changeset viewer.