Plugin Directory

Changeset 3357556


Ignore:
Timestamp:
09/08/2025 12:33:46 AM (5 months ago)
Author:
beautifulplugins
Message:

Release version refs/tags/v2.0.5

Location:
ai-content-writer/trunk
Files:
18 edited

Legend:

Unmodified
Added
Removed
  • ai-content-writer/trunk/ai-content-writer.php

    r3326474 r3357556  
    44 * Plugin URI:        https://beautifulplugins.com/ai-content-writer/
    55 * Description:       AI Content Writer helps you automatically generate high-quality, SEO-optimized content for your blog or website in minutes using advanced AI technologies like ChatGPT, OpenAI, Google Gemini, and more.
    6  * Version:           2.0.4
     6 * Version:           2.0.5
    77 * Requires at least: 5.0
    88 * Requires PHP:      7.4
     
    4747 */
    4848function ai_content_writer() {
    49     return Plugin::create( __FILE__, '2.0.4' );
     49    return Plugin::create( __FILE__, '2.0.5' );
    5050}
    5151
  • ai-content-writer/trunk/assets/css/aicw-admin-rtl.css

    r3326474 r3357556  
    1 .aicw-admin-header{align-items:center;background-color:#fff;display:flex;flex-wrap:wrap;gap:10px;justify-content:space-between;margin-right:-20px;padding:.5rem 1.25rem}.aicw-admin-header__info{gap:.5rem}.aicw-admin-header__info,.aicw-admin-header__logo{align-items:center;display:flex}.aicw-admin-header__logo img{height:auto;width:42px}.aicw-admin-header__title{font-size:1.5rem;margin-bottom:5px;margin-top:0}.aicw-admin-header__title sup{color:#888;font-size:13px;font-weight:400}.aicw-admin-header__subtitle{font-size:14px;margin:0}.aicw-admin-header__menu-items{align-items:center;display:flex;gap:10px;list-style:none;margin:0;padding:0}.aicw-admin-header__menu-item{align-items:center;cursor:pointer;display:flex;gap:5px;margin-bottom:0}.aicw-admin-header__menu-item.active{color:#0073aa;font-weight:700}.aicw-admin-header__menu-link{color:inherit;font-size:14px;text-decoration:none;transition:color .3s}.aicw-admin-header__menu-link:focus{box-shadow:none;outline:none}.aicw-admin-header__menu-link.go-pro{color:#b32d2e;font-weight:500}@media(max-width:600px){.aicw-admin-header{padding-left:10px;padding-top:3.25rem}.aicw-admin-header__title{font-size:18px}.aicw-admin-header__subtitle{font-size:12px}.aicw-admin-header__menu-items{flex-wrap:wrap}#wpbody{padding-top:0}}.form-field{margin-bottom:.5rem}.form-field .input-group{margin-top:5px}.form-field .input-group.range_slider{display:flex;gap:.25rem}.form-field input[type=color],.form-field input[type=date],.form-field input[type=datetime-local],.form-field input[type=datetime],.form-field input[type=email],.form-field input[type=month],.form-field input[type=number],.form-field input[type=password],.form-field input[type=search],.form-field input[type=tel],.form-field input[type=text],.form-field input[type=time],.form-field input[type=url],.form-field input[type=week],.form-field select,.form-field textarea{border:1px solid #ddd;max-width:100%;padding:4px 8px;width:100%}.form-field input[type=range]{width:100%}.form-field abbr{text-decoration:none}.form-field:last-child{margin-bottom:0}.aicw-wrap .d-flex{display:flex}.aicw-wrap .flex-justify__space-between{justify-content:space-between}.aicw-wrap .w-100{width:100%}.aicw-wrap .text-center{text-align:center}.aicw-wrap .gap-1{gap:1rem}.aicw-wrap .display-none{display:none}.aicw-wrap .pro-label{font-weight:700}.aicw-wrap .aicw__header h2{font-size:23px;font-weight:400;line-height:1.3;margin:0;padding:9px 0 4px}.aicw-wrap .aicw__body{display:flex;gap:1.25rem}.aicw-wrap .aicw__body__content{width:100%}.aicw-wrap .aicw__body__content.has-padding{background:#fff;padding:20px}.aicw-wrap .aicw__body__aside{display:flex;flex-direction:column;gap:1.25rem}.aicw-wrap #aicw-form{display:flex;gap:1.25rem;width:100%}.aicw-wrap #aicw-form .aicw-form__content{width:100%}.aicw-wrap #aicw-form .aicw-form__content.has-padding{background:#fff;padding:20px}.aicw-wrap #aicw-form .aicw-form__aside{display:flex;flex-direction:column;gap:1.25rem;max-width:350px;width:100%}@media(max-width:768px){.aicw-wrap #aicw-form{flex-direction:column}.aicw-wrap #aicw-form .aicw-form__content{width:100%}.aicw-wrap #aicw-form .aicw-form__aside{max-width:100%;width:100%}.aicw-wrap .page-title-action,.aicw-wrap .page-title-action:focus{font-size:12px;line-height:1.3rem;padding:5px 10px}}.aicw-card{background:#fff;border:1px solid #ddd;margin-bottom:1.25rem}.aicw-card__title{margin:0}.aicw-card__header{border-bottom:1px solid #ddd;padding:10px 20px}.aicw-card__body,.aicw-card__footer{padding:10px 20px}.aicw-sidebar{background:#fff;border:1px solid #ddd}.aicw-sidebar h2{margin:0}.aicw-sidebar__header{border-bottom:1px solid #ddd;padding:10px 20px}.aicw-sidebar__header sup{color:#4caf50;font-size:12px}.aicw-sidebar__body{padding:10px 20px}.aicw-sidebar__footer{border-top:1px solid #ddd;display:flex;justify-content:flex-end;padding:10px 20px}.aicw-sidebar__footer .submit{margin:0;padding:0}.aicw-sidebar .spinner{display:none;height:20px;vertical-align:middle;visibility:hidden;width:20px}.aicw-sidebar .spinner.active{display:inline-block;visibility:visible}.aicw-sidebar .maybe-has__thumbnail{align-items:center;display:flex;flex-direction:row;gap:5px}.aicw-sidebar .maybe-has__thumbnail img{border-radius:5px;height:40px;width:40px}.aicw_posts .heading sup{color:#f60;font-size:12px}.aicw_posts .actions,.aicw_posts .status{width:10%}.aicw_posts .maybe-has__thumbnail{align-items:center;display:flex;flex-direction:row;gap:5px}.aicw_posts .maybe-has__thumbnail img{border-radius:5px;height:40px;width:40px}.aicw_posts .progress-indicator{background:#eee;border-radius:5px;height:20px;overflow:hidden;width:100%}.aicw_posts .progress-indicator .progress-indicator-inner{background:#4caf50;color:#fff;font-weight:700;height:100%;line-height:20px;text-align:center}.aicw-total-processed .aicw-post-count{font-size:3rem;font-weight:700;margin:0}.aicw-total-processed .published-posts{background:rgba(54,162,235,.05)}.aicw-total-processed .published-posts .aicw-post-count{color:#36a2eb}.aicw-total-processed .pending-posts{background:rgba(255,99,132,.05)}.aicw-total-processed .pending-posts .aicw-post-count{color:#ff6384}.aicw-total-processed .draft-posts{background:rgba(255,206,86,.05)}.aicw-total-processed .draft-posts .aicw-post-count{color:#ffce56}@media(max-width:576px){.aicw-total-processed{flex-direction:column;gap:0!important}}.aicw_repeat_table td.actions{vertical-align:middle}.aicw-settings #aicw-form .aicw-form__content{background:rgba(0,0,0,0);padding-bottom:0;padding-right:0;padding-top:0}.aicw-settings .field-group{display:flex;flex-direction:row;gap:1rem;margin-bottom:20px}.aicw-settings .field-group .field-label{min-width:180px;width:180px}.aicw-settings .field-group.field-section{flex-direction:column;gap:0}.aicw__sidebar__header small,.wp-heading-inline small{color:#888;font-size:13px;vertical-align:super}.aicw-pro-badge{text-decoration:none}.aicw-pro-badge .pro-label{color:#b32d2e}.aicw-featured-image__content{padding-left:20px}.aicw-featured-image__images{display:-ms-grid;display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}.aicw-featured-image__images .aicw-featured-image__image{align-items:center;border:2px solid #ddd;display:flex;justify-content:center;padding:8px;transition:transform .2s ease}.aicw-featured-image__images .aicw-featured-image__image:hover{-ms-transform:scale(1.05);transform:scale(1.05)}.aicw-featured-image__images .aicw-featured-image__image img{border-radius:4px;display:block;height:auto;max-width:100%}.aicw-featured-image__images .aicw-featured-image__image.selected{border:2px solid #007cba}.aicw-featured-image__images .aicw-featured-image__image-label{cursor:pointer;display:block;text-align:center}.aicw-featured-image__images .aicw-featured-image__image-label input[type=radio]{display:none}.aicw-featured-image__footer{margin-top:50px}
     1.aicw-admin-header{align-items:center;background-color:#fff;display:flex;flex-wrap:wrap;gap:10px;justify-content:space-between;margin-right:-20px;padding:.5rem 1.25rem}.aicw-admin-header__info{gap:.5rem}.aicw-admin-header__info,.aicw-admin-header__logo{align-items:center;display:flex}.aicw-admin-header__logo img{height:auto;width:42px}.aicw-admin-header__title{font-size:1.5rem;margin-bottom:5px;margin-top:0}.aicw-admin-header__title sup{color:#888;font-size:13px;font-weight:400}.aicw-admin-header__subtitle{font-size:14px;margin:0}.aicw-admin-header__menu-items{align-items:center;display:flex;gap:10px;list-style:none;margin:0;padding:0}.aicw-admin-header__menu-item{align-items:center;cursor:pointer;display:flex;gap:5px;margin-bottom:0}.aicw-admin-header__menu-item.active{color:#0073aa;font-weight:700}.aicw-admin-header__menu-link{color:inherit;font-size:14px;text-decoration:none;transition:color .3s}.aicw-admin-header__menu-link:focus{box-shadow:none;outline:none}.aicw-admin-header__menu-link.go-pro{color:#b32d2e;font-weight:500}@media(max-width:600px){.aicw-admin-header{padding-left:10px;padding-top:3.25rem}.aicw-admin-header__title{font-size:18px}.aicw-admin-header__subtitle{font-size:12px}.aicw-admin-header__menu-items{flex-wrap:wrap}#wpbody{padding-top:0}}.form-field{margin-bottom:.5rem}.form-field .input-group{margin-top:5px}.form-field .input-group.range_slider{display:flex;gap:.25rem}.form-field input[type=color],.form-field input[type=date],.form-field input[type=datetime-local],.form-field input[type=datetime],.form-field input[type=email],.form-field input[type=month],.form-field input[type=number],.form-field input[type=password],.form-field input[type=search],.form-field input[type=tel],.form-field input[type=text],.form-field input[type=time],.form-field input[type=url],.form-field input[type=week],.form-field select,.form-field textarea{border:1px solid #ddd;max-width:100%;padding:4px 8px;width:100%}.form-field input[type=range]{width:100%}.form-field abbr{text-decoration:none}.form-field:last-child{margin-bottom:0}.aicw-wrap .d-flex{display:flex}.aicw-wrap .flex-justify__space-between{justify-content:space-between}.aicw-wrap .w-100{width:100%}.aicw-wrap .text-center{text-align:center}.aicw-wrap .gap-1{gap:1rem}.aicw-wrap .display-none{display:none}.aicw-wrap .pro-label{font-weight:700}.aicw-wrap .aicw__header h2{font-size:23px;font-weight:400;line-height:1.3;margin:0;padding:9px 0 4px}.aicw-wrap .aicw__body{display:flex;gap:1.25rem}.aicw-wrap .aicw__body__content{width:100%}.aicw-wrap .aicw__body__content.has-padding{background:#fff;padding:20px}.aicw-wrap .aicw__body__aside{display:flex;flex-direction:column;gap:1.25rem}.aicw-wrap #aicw-form{display:flex;gap:1.25rem;width:100%}.aicw-wrap #aicw-form .aicw-form__content{width:100%}.aicw-wrap #aicw-form .aicw-form__content.has-padding{background:#fff;padding:20px}.aicw-wrap #aicw-form .aicw-form__aside{display:flex;flex-direction:column;gap:1.25rem;max-width:350px;width:100%}@media(max-width:768px){.aicw-wrap #aicw-form{flex-direction:column}.aicw-wrap #aicw-form .aicw-form__content{width:100%}.aicw-wrap #aicw-form .aicw-form__aside{max-width:100%;width:100%}.aicw-wrap .page-title-action,.aicw-wrap .page-title-action:focus{font-size:12px;line-height:1.3rem;padding:5px 10px}}.aicw-card{background:#fff;border:1px solid #ddd;margin-bottom:1.25rem}.aicw-card__title{margin:0}.aicw-card__header{border-bottom:1px solid #ddd;padding:10px 20px}.aicw-card__body,.aicw-card__footer{padding:10px 20px}.aicw-sidebar{background:#fff;border:1px solid #ddd}.aicw-sidebar h2{margin:0}.aicw-sidebar__header{border-bottom:1px solid #ddd;padding:10px 20px}.aicw-sidebar__header sup{color:#4caf50;font-size:12px}.aicw-sidebar__body{padding:10px 20px}.aicw-sidebar__footer{border-top:1px solid #ddd;display:flex;justify-content:flex-end;padding:10px 20px}.aicw-sidebar__footer.space-between{justify-content:space-between}.aicw-sidebar__footer .submit{margin:0;padding:0}.aicw-sidebar .spinner{display:none;height:20px;vertical-align:middle;visibility:hidden;width:20px}.aicw-sidebar .spinner.active{display:inline-block;visibility:visible}.aicw-sidebar .maybe-has__thumbnail{align-items:center;display:flex;flex-direction:row;gap:5px}.aicw-sidebar .maybe-has__thumbnail img{border-radius:5px;height:40px;width:40px}.aicw_posts .heading sup{color:#f60;font-size:12px}.aicw_posts .actions,.aicw_posts .status{width:10%}.aicw_posts .maybe-has__thumbnail{align-items:center;display:flex;flex-direction:row;gap:5px}.aicw_posts .maybe-has__thumbnail img{border-radius:5px;height:40px;width:40px}.aicw_posts .progress-indicator{background:#eee;border-radius:5px;height:20px;overflow:hidden;width:100%}.aicw_posts .progress-indicator .progress-indicator-inner{background:#4caf50;color:#fff;font-weight:700;height:100%;line-height:20px;text-align:center}.aicw-total-processed .aicw-post-count{font-size:3rem;font-weight:700;margin:0}.aicw-total-processed .published-posts{background:rgba(54,162,235,.05)}.aicw-total-processed .published-posts .aicw-post-count{color:#36a2eb}.aicw-total-processed .pending-posts{background:rgba(255,99,132,.05)}.aicw-total-processed .pending-posts .aicw-post-count{color:#ff6384}.aicw-total-processed .draft-posts{background:rgba(255,206,86,.05)}.aicw-total-processed .draft-posts .aicw-post-count{color:#ffce56}@media(max-width:576px){.aicw-total-processed{flex-direction:column;gap:0!important}}.aicw_repeat_table td.actions{vertical-align:middle}.aicw-settings #aicw-form .aicw-form__content{background:rgba(0,0,0,0);padding-bottom:0;padding-right:0;padding-top:0}.aicw-settings .field-group{display:flex;flex-direction:row;gap:1rem;margin-bottom:20px}.aicw-settings .field-group .field-label{min-width:180px;width:180px}.aicw-settings .field-group.field-section{flex-direction:column;gap:0}.aicw__sidebar__header small,.wp-heading-inline small{color:#888;font-size:13px;vertical-align:super}.aicw-pro-badge{text-decoration:none}.aicw-pro-badge .pro-label{color:#b32d2e}.aicw-featured-image__content{padding-left:20px}.aicw-featured-image__images{display:-ms-grid;display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}.aicw-featured-image__images .aicw-featured-image__image{align-items:center;border:2px solid #ddd;display:flex;justify-content:center;padding:8px;transition:transform .2s ease}.aicw-featured-image__images .aicw-featured-image__image:hover{-ms-transform:scale(1.05);transform:scale(1.05)}.aicw-featured-image__images .aicw-featured-image__image img{border-radius:4px;display:block;height:auto;max-width:100%}.aicw-featured-image__images .aicw-featured-image__image.selected{border:2px solid #007cba}.aicw-featured-image__images .aicw-featured-image__image-label{cursor:pointer;display:block;text-align:center}.aicw-featured-image__images .aicw-featured-image__image-label input[type=radio]{display:none}.aicw-featured-image__footer{margin-top:50px}
  • ai-content-writer/trunk/assets/css/aicw-admin.asset.php

    r3326474 r3357556  
    1 <?php return array('dependencies' => array(), 'version' => '81fe1ba67b50124dfc1e');
     1<?php return array('dependencies' => array(), 'version' => 'ac65948c023b850cfb7d');
  • ai-content-writer/trunk/assets/css/aicw-admin.css

    r3326474 r3357556  
    1 .aicw-admin-header{align-items:center;background-color:#fff;display:flex;flex-wrap:wrap;gap:10px;justify-content:space-between;margin-left:-20px;padding:.5rem 1.25rem}.aicw-admin-header__info{gap:.5rem}.aicw-admin-header__info,.aicw-admin-header__logo{align-items:center;display:flex}.aicw-admin-header__logo img{height:auto;width:42px}.aicw-admin-header__title{font-size:1.5rem;margin-bottom:5px;margin-top:0}.aicw-admin-header__title sup{color:#888;font-size:13px;font-weight:400}.aicw-admin-header__subtitle{font-size:14px;margin:0}.aicw-admin-header__menu-items{align-items:center;display:flex;gap:10px;list-style:none;margin:0;padding:0}.aicw-admin-header__menu-item{align-items:center;cursor:pointer;display:flex;gap:5px;margin-bottom:0}.aicw-admin-header__menu-item.active{color:#0073aa;font-weight:700}.aicw-admin-header__menu-link{color:inherit;font-size:14px;text-decoration:none;transition:color .3s}.aicw-admin-header__menu-link:focus{box-shadow:none;outline:none}.aicw-admin-header__menu-link.go-pro{color:#b32d2e;font-weight:500}@media(max-width:600px){.aicw-admin-header{padding-right:10px;padding-top:3.25rem}.aicw-admin-header__title{font-size:18px}.aicw-admin-header__subtitle{font-size:12px}.aicw-admin-header__menu-items{flex-wrap:wrap}#wpbody{padding-top:0}}.form-field{margin-bottom:.5rem}.form-field .input-group{margin-top:5px}.form-field .input-group.range_slider{display:flex;gap:.25rem}.form-field input[type=color],.form-field input[type=date],.form-field input[type=datetime-local],.form-field input[type=datetime],.form-field input[type=email],.form-field input[type=month],.form-field input[type=number],.form-field input[type=password],.form-field input[type=search],.form-field input[type=tel],.form-field input[type=text],.form-field input[type=time],.form-field input[type=url],.form-field input[type=week],.form-field select,.form-field textarea{border:1px solid #ddd;max-width:100%;padding:4px 8px;width:100%}.form-field input[type=range]{width:100%}.form-field abbr{text-decoration:none}.form-field:last-child{margin-bottom:0}.aicw-wrap .d-flex{display:flex}.aicw-wrap .flex-justify__space-between{justify-content:space-between}.aicw-wrap .w-100{width:100%}.aicw-wrap .text-center{text-align:center}.aicw-wrap .gap-1{gap:1rem}.aicw-wrap .display-none{display:none}.aicw-wrap .pro-label{font-weight:700}.aicw-wrap .aicw__header h2{font-size:23px;font-weight:400;line-height:1.3;margin:0;padding:9px 0 4px}.aicw-wrap .aicw__body{display:flex;gap:1.25rem}.aicw-wrap .aicw__body__content{width:100%}.aicw-wrap .aicw__body__content.has-padding{background:#fff;padding:20px}.aicw-wrap .aicw__body__aside{display:flex;flex-direction:column;gap:1.25rem}.aicw-wrap #aicw-form{display:flex;gap:1.25rem;width:100%}.aicw-wrap #aicw-form .aicw-form__content{width:100%}.aicw-wrap #aicw-form .aicw-form__content.has-padding{background:#fff;padding:20px}.aicw-wrap #aicw-form .aicw-form__aside{display:flex;flex-direction:column;gap:1.25rem;max-width:350px;width:100%}@media(max-width:768px){.aicw-wrap #aicw-form{flex-direction:column}.aicw-wrap #aicw-form .aicw-form__content{width:100%}.aicw-wrap #aicw-form .aicw-form__aside{max-width:100%;width:100%}.aicw-wrap .page-title-action,.aicw-wrap .page-title-action:focus{font-size:12px;line-height:1.3rem;padding:5px 10px}}.aicw-card{background:#fff;border:1px solid #ddd;margin-bottom:1.25rem}.aicw-card__title{margin:0}.aicw-card__header{border-bottom:1px solid #ddd;padding:10px 20px}.aicw-card__body,.aicw-card__footer{padding:10px 20px}.aicw-sidebar{background:#fff;border:1px solid #ddd}.aicw-sidebar h2{margin:0}.aicw-sidebar__header{border-bottom:1px solid #ddd;padding:10px 20px}.aicw-sidebar__header sup{color:#4caf50;font-size:12px}.aicw-sidebar__body{padding:10px 20px}.aicw-sidebar__footer{border-top:1px solid #ddd;display:flex;justify-content:flex-end;padding:10px 20px}.aicw-sidebar__footer .submit{margin:0;padding:0}.aicw-sidebar .spinner{display:none;height:20px;vertical-align:middle;visibility:hidden;width:20px}.aicw-sidebar .spinner.active{display:inline-block;visibility:visible}.aicw-sidebar .maybe-has__thumbnail{align-items:center;display:flex;flex-direction:row;gap:5px}.aicw-sidebar .maybe-has__thumbnail img{border-radius:5px;height:40px;width:40px}.aicw_posts .heading sup{color:#f60;font-size:12px}.aicw_posts .actions,.aicw_posts .status{width:10%}.aicw_posts .maybe-has__thumbnail{align-items:center;display:flex;flex-direction:row;gap:5px}.aicw_posts .maybe-has__thumbnail img{border-radius:5px;height:40px;width:40px}.aicw_posts .progress-indicator{background:#eee;border-radius:5px;height:20px;overflow:hidden;width:100%}.aicw_posts .progress-indicator .progress-indicator-inner{background:#4caf50;color:#fff;font-weight:700;height:100%;line-height:20px;text-align:center}.aicw-total-processed .aicw-post-count{font-size:3rem;font-weight:700;margin:0}.aicw-total-processed .published-posts{background:rgba(54,162,235,.05)}.aicw-total-processed .published-posts .aicw-post-count{color:#36a2eb}.aicw-total-processed .pending-posts{background:rgba(255,99,132,.05)}.aicw-total-processed .pending-posts .aicw-post-count{color:#ff6384}.aicw-total-processed .draft-posts{background:rgba(255,206,86,.05)}.aicw-total-processed .draft-posts .aicw-post-count{color:#ffce56}@media(max-width:576px){.aicw-total-processed{flex-direction:column;gap:0!important}}.aicw_repeat_table td.actions{vertical-align:middle}.aicw-settings #aicw-form .aicw-form__content{background:rgba(0,0,0,0);padding-bottom:0;padding-left:0;padding-top:0}.aicw-settings .field-group{display:flex;flex-direction:row;gap:1rem;margin-bottom:20px}.aicw-settings .field-group .field-label{min-width:180px;width:180px}.aicw-settings .field-group.field-section{flex-direction:column;gap:0}.aicw__sidebar__header small,.wp-heading-inline small{color:#888;font-size:13px;vertical-align:super}.aicw-pro-badge{text-decoration:none}.aicw-pro-badge .pro-label{color:#b32d2e}.aicw-featured-image__content{padding-right:20px}.aicw-featured-image__images{display:-ms-grid;display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}.aicw-featured-image__images .aicw-featured-image__image{align-items:center;border:2px solid #ddd;display:flex;justify-content:center;padding:8px;transition:transform .2s ease}.aicw-featured-image__images .aicw-featured-image__image:hover{-ms-transform:scale(1.05);transform:scale(1.05)}.aicw-featured-image__images .aicw-featured-image__image img{border-radius:4px;display:block;height:auto;max-width:100%}.aicw-featured-image__images .aicw-featured-image__image.selected{border:2px solid #007cba}.aicw-featured-image__images .aicw-featured-image__image-label{cursor:pointer;display:block;text-align:center}.aicw-featured-image__images .aicw-featured-image__image-label input[type=radio]{display:none}.aicw-featured-image__footer{margin-top:50px}
     1.aicw-admin-header{align-items:center;background-color:#fff;display:flex;flex-wrap:wrap;gap:10px;justify-content:space-between;margin-left:-20px;padding:.5rem 1.25rem}.aicw-admin-header__info{gap:.5rem}.aicw-admin-header__info,.aicw-admin-header__logo{align-items:center;display:flex}.aicw-admin-header__logo img{height:auto;width:42px}.aicw-admin-header__title{font-size:1.5rem;margin-bottom:5px;margin-top:0}.aicw-admin-header__title sup{color:#888;font-size:13px;font-weight:400}.aicw-admin-header__subtitle{font-size:14px;margin:0}.aicw-admin-header__menu-items{align-items:center;display:flex;gap:10px;list-style:none;margin:0;padding:0}.aicw-admin-header__menu-item{align-items:center;cursor:pointer;display:flex;gap:5px;margin-bottom:0}.aicw-admin-header__menu-item.active{color:#0073aa;font-weight:700}.aicw-admin-header__menu-link{color:inherit;font-size:14px;text-decoration:none;transition:color .3s}.aicw-admin-header__menu-link:focus{box-shadow:none;outline:none}.aicw-admin-header__menu-link.go-pro{color:#b32d2e;font-weight:500}@media(max-width:600px){.aicw-admin-header{padding-right:10px;padding-top:3.25rem}.aicw-admin-header__title{font-size:18px}.aicw-admin-header__subtitle{font-size:12px}.aicw-admin-header__menu-items{flex-wrap:wrap}#wpbody{padding-top:0}}.form-field{margin-bottom:.5rem}.form-field .input-group{margin-top:5px}.form-field .input-group.range_slider{display:flex;gap:.25rem}.form-field input[type=color],.form-field input[type=date],.form-field input[type=datetime-local],.form-field input[type=datetime],.form-field input[type=email],.form-field input[type=month],.form-field input[type=number],.form-field input[type=password],.form-field input[type=search],.form-field input[type=tel],.form-field input[type=text],.form-field input[type=time],.form-field input[type=url],.form-field input[type=week],.form-field select,.form-field textarea{border:1px solid #ddd;max-width:100%;padding:4px 8px;width:100%}.form-field input[type=range]{width:100%}.form-field abbr{text-decoration:none}.form-field:last-child{margin-bottom:0}.aicw-wrap .d-flex{display:flex}.aicw-wrap .flex-justify__space-between{justify-content:space-between}.aicw-wrap .w-100{width:100%}.aicw-wrap .text-center{text-align:center}.aicw-wrap .gap-1{gap:1rem}.aicw-wrap .display-none{display:none}.aicw-wrap .pro-label{font-weight:700}.aicw-wrap .aicw__header h2{font-size:23px;font-weight:400;line-height:1.3;margin:0;padding:9px 0 4px}.aicw-wrap .aicw__body{display:flex;gap:1.25rem}.aicw-wrap .aicw__body__content{width:100%}.aicw-wrap .aicw__body__content.has-padding{background:#fff;padding:20px}.aicw-wrap .aicw__body__aside{display:flex;flex-direction:column;gap:1.25rem}.aicw-wrap #aicw-form{display:flex;gap:1.25rem;width:100%}.aicw-wrap #aicw-form .aicw-form__content{width:100%}.aicw-wrap #aicw-form .aicw-form__content.has-padding{background:#fff;padding:20px}.aicw-wrap #aicw-form .aicw-form__aside{display:flex;flex-direction:column;gap:1.25rem;max-width:350px;width:100%}@media(max-width:768px){.aicw-wrap #aicw-form{flex-direction:column}.aicw-wrap #aicw-form .aicw-form__content{width:100%}.aicw-wrap #aicw-form .aicw-form__aside{max-width:100%;width:100%}.aicw-wrap .page-title-action,.aicw-wrap .page-title-action:focus{font-size:12px;line-height:1.3rem;padding:5px 10px}}.aicw-card{background:#fff;border:1px solid #ddd;margin-bottom:1.25rem}.aicw-card__title{margin:0}.aicw-card__header{border-bottom:1px solid #ddd;padding:10px 20px}.aicw-card__body,.aicw-card__footer{padding:10px 20px}.aicw-sidebar{background:#fff;border:1px solid #ddd}.aicw-sidebar h2{margin:0}.aicw-sidebar__header{border-bottom:1px solid #ddd;padding:10px 20px}.aicw-sidebar__header sup{color:#4caf50;font-size:12px}.aicw-sidebar__body{padding:10px 20px}.aicw-sidebar__footer{border-top:1px solid #ddd;display:flex;justify-content:flex-end;padding:10px 20px}.aicw-sidebar__footer.space-between{justify-content:space-between}.aicw-sidebar__footer .submit{margin:0;padding:0}.aicw-sidebar .spinner{display:none;height:20px;vertical-align:middle;visibility:hidden;width:20px}.aicw-sidebar .spinner.active{display:inline-block;visibility:visible}.aicw-sidebar .maybe-has__thumbnail{align-items:center;display:flex;flex-direction:row;gap:5px}.aicw-sidebar .maybe-has__thumbnail img{border-radius:5px;height:40px;width:40px}.aicw_posts .heading sup{color:#f60;font-size:12px}.aicw_posts .actions,.aicw_posts .status{width:10%}.aicw_posts .maybe-has__thumbnail{align-items:center;display:flex;flex-direction:row;gap:5px}.aicw_posts .maybe-has__thumbnail img{border-radius:5px;height:40px;width:40px}.aicw_posts .progress-indicator{background:#eee;border-radius:5px;height:20px;overflow:hidden;width:100%}.aicw_posts .progress-indicator .progress-indicator-inner{background:#4caf50;color:#fff;font-weight:700;height:100%;line-height:20px;text-align:center}.aicw-total-processed .aicw-post-count{font-size:3rem;font-weight:700;margin:0}.aicw-total-processed .published-posts{background:rgba(54,162,235,.05)}.aicw-total-processed .published-posts .aicw-post-count{color:#36a2eb}.aicw-total-processed .pending-posts{background:rgba(255,99,132,.05)}.aicw-total-processed .pending-posts .aicw-post-count{color:#ff6384}.aicw-total-processed .draft-posts{background:rgba(255,206,86,.05)}.aicw-total-processed .draft-posts .aicw-post-count{color:#ffce56}@media(max-width:576px){.aicw-total-processed{flex-direction:column;gap:0!important}}.aicw_repeat_table td.actions{vertical-align:middle}.aicw-settings #aicw-form .aicw-form__content{background:rgba(0,0,0,0);padding-bottom:0;padding-left:0;padding-top:0}.aicw-settings .field-group{display:flex;flex-direction:row;gap:1rem;margin-bottom:20px}.aicw-settings .field-group .field-label{min-width:180px;width:180px}.aicw-settings .field-group.field-section{flex-direction:column;gap:0}.aicw__sidebar__header small,.wp-heading-inline small{color:#888;font-size:13px;vertical-align:super}.aicw-pro-badge{text-decoration:none}.aicw-pro-badge .pro-label{color:#b32d2e}.aicw-featured-image__content{padding-right:20px}.aicw-featured-image__images{display:-ms-grid;display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}.aicw-featured-image__images .aicw-featured-image__image{align-items:center;border:2px solid #ddd;display:flex;justify-content:center;padding:8px;transition:transform .2s ease}.aicw-featured-image__images .aicw-featured-image__image:hover{-ms-transform:scale(1.05);transform:scale(1.05)}.aicw-featured-image__images .aicw-featured-image__image img{border-radius:4px;display:block;height:auto;max-width:100%}.aicw-featured-image__images .aicw-featured-image__image.selected{border:2px solid #007cba}.aicw-featured-image__images .aicw-featured-image__image-label{cursor:pointer;display:block;text-align:center}.aicw-featured-image__images .aicw-featured-image__image-label input[type=radio]{display:none}.aicw-featured-image__footer{margin-top:50px}
  • ai-content-writer/trunk/assets/js/aicw-admin.asset.php

    r3295814 r3357556  
    1 <?php return array('dependencies' => array(), 'version' => '565d09a9b93d741ee40b');
     1<?php return array('dependencies' => array(), 'version' => 'f30d6d5e8e839f614dbe');
  • ai-content-writer/trunk/assets/js/aicw-admin.js

    r3295814 r3357556  
    1 jQuery((function(e){"use strict";var t={init:function(){e("table.aicw_repeat_table").on("click","a.insert",this.insert_row).on("click","a.delete",this.delete_row).on("update",this.update_index)},insert_row:function(t){return t.preventDefault(),e(this).closest("table").find("tbody").append(e(this).data("row")).trigger("update"),!1},delete_row:function(t){return t.preventDefault(),e(this).closest("tr").remove().closest("table").trigger("update"),!1},update_index:function(){e(this).find("tbody tr").each((function(t){e(this).find("input, select, textarea").each((function(){var a=e(this);a.attr("name",a.attr("name").replace(/\[\d+\]/,"["+t+"]"))}))}))}};({init:function(){this.bindEvents(),this.updateCampaignFields(e("#campaign_type").val())},bindEvents:function(){var t=this;e('.aicw-featured-image__image-label input[type="radio"]').on("change",this.toggleSelectedImage),e("#generate_content").on("click",this.handleFormSubmit),e("#campaign_type").on("change",(function(a){t.updateCampaignFields(e(a.target).val())})),e('.range_slider input[type="range"]').on("input",this.updateSliderValue),e(".aicw_delete_temp_post").on("click",this.deleteTempPost)},toggleSelectedImage:function(){e(".aicw-featured-image__image").removeClass("selected"),e(this).closest(".aicw-featured-image__image").addClass("selected")},handleFormSubmit:function(){var t=e(".aicw__sidebar__footer .spinner");e(this).closest("form")[0].checkValidity()&&t.addClass("active").show()},updateCampaignFields:function(t){e(".hide-if__"+t).hide(),e(".show-if__"+t).show()},updateSliderValue:function(){var t=e(this).val();e(this).next(".range_slider_value").text(t)},deleteTempPost:function(t){t.preventDefault();var a=e(this).data("post-id");confirm("Are you sure you want to delete this post? This action cannot be undone.")&&e.ajax({url:aicw_object.ajax_url,type:"POST",data:{action:"aicw_delete_temp_post",post_id:a,nonce:aicw_object.nonce},success:function(e){alert(e.data.message),e.success&&location.reload()},error:function(){alert("Something went wrong. Please try again later.")}})}}).init(),t.init()}));
     1jQuery((function(e){"use strict";var t={init:function(){e("table.aicw_repeat_table").on("click","a.insert",this.insert_row).on("click","a.delete",this.delete_row).on("update",this.update_index)},insert_row:function(t){return t.preventDefault(),e(this).closest("table").find("tbody").append(e(this).data("row")).trigger("update"),!1},delete_row:function(t){return t.preventDefault(),e(this).closest("tr").remove().closest("table").trigger("update"),!1},update_index:function(){e(this).find("tbody tr").each((function(t){e(this).find("input, select, textarea").each((function(){var a=e(this);a.attr("name",a.attr("name").replace(/\[\d+\]/,"["+t+"]"))}))}))}};({init:function(){this.bindEvents(),this.updateCampaignFields(e("#campaign_type").val())},bindEvents:function(){var t=this;e('.aicw-featured-image__image-label input[type="radio"]').on("change",this.toggleSelectedImage),e("#generate_content").on("click",this.handleFormSubmit),e("#campaign_type").on("change",(function(a){t.updateCampaignFields(e(a.target).val())})),e('.range_slider input[type="range"]').on("input",this.updateSliderValue),e(".aicw_delete_temp_post").on("click",this.deleteTempPost),e("#aicw_run_campaign").on("click",this.handleRunCampaign)},toggleSelectedImage:function(){e(".aicw-featured-image__image").removeClass("selected"),e(this).closest(".aicw-featured-image__image").addClass("selected")},handleFormSubmit:function(){var t=e(".aicw__sidebar__footer .spinner");e(this).closest("form")[0].checkValidity()&&t.addClass("active").show()},updateCampaignFields:function(t){e(".hide-if__"+t).hide(),e(".show-if__"+t).show()},updateSliderValue:function(){var t=e(this).val();e(this).next(".range_slider_value").text(t)},deleteTempPost:function(t){t.preventDefault();var a=e(this).data("post-id");confirm("Are you sure you want to delete this post? This action cannot be undone.")&&e.ajax({url:aicw_object.ajax_url,type:"POST",data:{action:"aicw_delete_temp_post",post_id:a,nonce:aicw_object.nonce},success:function(e){alert(e.data.message),e.success&&location.reload()},error:function(){alert("Something went wrong. Please try again later.")}})},handleRunCampaign:function(t){t.preventDefault();var a=e(this).data("campaign-id");if(confirm("Are you sure you want to run this campaign?")){var i=e("#aicw_run_campaign_spinner");i.addClass("active").show(),e.ajax({url:aicw_object.ajax_url,type:"POST",data:{action:"aicw_run_campaign",campaign_id:a,nonce:aicw_object.nonce},success:function(e){alert(e.data.message),e.success?location.reload():i.removeClass("active").hide()},error:function(){alert("Something went wrong. Please try again later."),i.removeClass("active").hide()}})}}}).init(),t.init()}));
  • ai-content-writer/trunk/includes/Admin/Actions.php

    r3295814 r3357556  
    22
    33namespace AIContentWriter\Admin;
     4
     5use AIContentWriter\Cron;
    46
    57defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
     
    2729        // Handle ajax request for deleting the campaigns temporarily post.
    2830        add_action( 'wp_ajax_aicw_delete_temp_post', array( __CLASS__, 'handle_delete_temp_post' ) );
     31
     32        // Handle ajax request for running the campaign instantly.
     33        add_action( 'wp_ajax_aicw_run_campaign', array( __CLASS__, 'handle_run_campaign' ) );
    2934    }
    3035
     
    253258         * @since 1.7.0
    254259         */
    255         do_action( 'aicw_before_update_settings', $_POST );
     260        do_action( 'aicw_before_update_settings' );
    256261
    257262        $allowed_hosts          = isset( $_POST['aicw_allowed_hosts'] ) ? sanitize_textarea_field( wp_unslash( $_POST['aicw_allowed_hosts'] ) ) : 'https://www.bing.com';
     
    620625        );
    621626    }
     627
     628    /**
     629     * Handle ajax request for running the campaign instantly.
     630     *
     631     * @since 1.4.0
     632     * @return void
     633     */
     634    public static function handle_run_campaign() {
     635        check_ajax_referer( 'aicw_nonce', 'nonce' );
     636
     637        if ( ! current_user_can( 'manage_options' ) ) {
     638            wp_send_json_error(
     639                array(
     640                    'message' => esc_html__( 'You do not have permission to perform this action.', 'ai-content-writer' ),
     641                )
     642            );
     643        }
     644
     645        $campaign_id = isset( $_POST['campaign_id'] ) ? absint( wp_unslash( $_POST['campaign_id'] ) ) : 0;
     646        if ( empty( $campaign_id ) ) {
     647            wp_send_json_error(
     648                array(
     649                    'message' => esc_html__( 'Invalid campaign. Please try again.', 'ai-content-writer' ),
     650                )
     651            );
     652        }
     653
     654        $campaign = get_post( $campaign_id );
     655        if ( ! $campaign || 'aicw_campaign' !== $campaign->post_type ) {
     656            wp_send_json_error(
     657                array(
     658                    'message' => esc_html__( 'Campaign not found. Please try again.', 'ai-content-writer' ),
     659                )
     660            );
     661        }
     662
     663        // Run the campaign instantly.
     664        Cron::generate_titles(
     665            array(
     666                'p'              => $campaign_id,
     667                'posts_per_page' => 1,
     668            )
     669        );
     670
     671        Cron::generate_content(
     672            array(
     673                'meta_query' => array( // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query
     674                    array(
     675                        'key'   => '_aicw_campaign_id',
     676                        'value' => $campaign_id,
     677                    ),
     678                ),
     679            )
     680        );
     681
     682        Cron::generate_thumbnails(
     683            array(
     684                'meta_query' => array( // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query
     685                    array(
     686                        'key'   => '_aicw_campaign_id',
     687                        'value' => $campaign_id,
     688                    ),
     689                ),
     690            )
     691        );
     692
     693        Cron::publish_posts(
     694            array(
     695                'meta_query' => array( // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query
     696                    array(
     697                        'key'   => '_aicw_campaign_id',
     698                        'value' => $campaign_id,
     699                    ),
     700                ),
     701            )
     702        );
     703
     704        wp_send_json_success(
     705            array(
     706                'message' => esc_html__( 'Campaign run successfully.', 'ai-content-writer' ),
     707            )
     708        );
     709    }
    622710}
  • ai-content-writer/trunk/includes/Admin/Settings.php

    r3295814 r3357556  
    3939                </select>
    4040                <abbr class="aicw-pro-badge required" title="<?php esc_attr_e( 'This feature is available in the Pro version', 'ai-content-writer' ); ?>"> &nbsp;&mdash; <a href="https://beautifulplugins.com/plugins/ai-content-writer-pro/?utm_source=plugin&utm_medium=pro-badge&utm_campaign=pro-badge" class="pro-label" target="_blank"><?php esc_html_e( 'Go Pro', 'ai-content-writer' ); ?></a></abbr>
    41                 <p class="description"><?php esc_html_e( 'Select the frequency (hourly, twice daily, daily, weekly) for the campaign to run automatically. This will be used to schedule the campaigns to run at the specified frequency to generate content.', 'ai-content-writer' ); ?></p>
     41                <p class="description"><?php esc_html_e( 'Select the frequency (every 15 minutes, every 30 minutes, hourly, twice daily, daily, weekly) for the campaign to run automatically. This will be used to schedule the campaigns to run at the specified frequency to generate content.', 'ai-content-writer' ); ?></p>
    4242            </div>
    4343        </div>
  • ai-content-writer/trunk/includes/Admin/views/add-campaign.php

    r3326474 r3357556  
    228228                            </p>
    229229                        </div>
     230                        <div class="form-field">
     231                            <p class="description">
     232                                <strong><?php esc_html_e( 'Campaign Frequency: ', 'ai-content-writer' ); ?></strong>
     233                                <span><?php echo esc_html( get_option( 'aicwp_campaign_frequency', 'hourly' ) ); ?></span>
     234                                <a href="<?php echo esc_url( admin_url( 'admin.php?page=aicw-settings' ) ); ?>" target="_blank">
     235                                    <?php esc_html_e( 'Change', 'ai-content-writer' ); ?>
     236                                </a>
     237                            </p>
     238                        </div>
    230239                    </div>
    231240                    <div class="aicw-sidebar__footer">
  • ai-content-writer/trunk/includes/Admin/views/edit-campaign.php

    r3326474 r3357556  
    237237                            <th><?php esc_html_e( 'Progress', 'ai-content-writer' ); ?></th>
    238238                            <th class="status"><?php esc_html_e( 'Status', 'ai-content-writer' ); ?></th>
     239                            <th class="status"><?php esc_html_e( 'Source', 'ai-content-writer' ); ?></th>
    239240                            <th class="actions"><?php esc_html_e( 'Actions', 'ai-content-writer' ); ?></th>
    240241                        </tr>
     
    270271                                    <td><?php echo esc_html( $post->post_status ); ?></td>
    271272                                    <td>
     273                                        <?php
     274                                        $source_link = get_post_meta( $post->ID, '_aicw_content_source_link', true );
     275                                        if ( $source_link ) :
     276                                            ?>
     277                                            <a href="<?php echo esc_url( $source_link ); ?>" target="_blank">
     278                                                <?php esc_html_e( 'View Source', 'ai-content-writer' ); ?>
     279                                            </a>
     280                                            <?php
     281                                        else :
     282                                            echo esc_html( '&mdash;' );
     283                                        endif;
     284                                        ?>
     285                                    </td>
     286                                    <td>
    272287                                        <a href="#" class="aicw_delete_temp_post" data-post-id="<?php echo esc_attr( $post->ID ); ?>">
    273288                                            <?php esc_html_e( 'Delete', 'ai-content-writer' ); ?>
     
    280295                            ?>
    281296                            <tr>
    282                                 <td colspan="4"><?php esc_html_e( 'No generated posts found for this campaign. Please wait while the posts are being generated. It may take a while. Or maybe already generated and completed the target of this campaign.', 'ai-content-writer' ); ?></td>
     297                                <td colspan="5"><?php esc_html_e( 'No generated posts found for this campaign. Please wait while the posts are being generated. It may take a while. Or maybe already generated and completed the target of this campaign.', 'ai-content-writer' ); ?></td>
    283298                            </tr>
    284299                            <?php
     
    308323                            </p>
    309324                        </div>
    310 
    311325                        <div class="form-field">
    312326                            <label for="status"><strong><?php esc_html_e( 'Campaign Status', 'ai-content-writer' ); ?></strong></label>
     
    322336                            </p>
    323337                        </div>
    324                     </div>
    325                     <div class="aicw-sidebar__footer">
     338                        <div class="form-field">
     339                            <p class="description">
     340                                <strong><?php esc_html_e( 'Campaign Frequency: ', 'ai-content-writer' ); ?></strong>
     341                                <span><?php echo esc_html( get_option( 'aicwp_campaign_frequency', 'hourly' ) ); ?></span>
     342                                <a href="<?php echo esc_url( admin_url( 'admin.php?page=aicw-settings' ) ); ?>" target="_blank">
     343                                    <?php esc_html_e( 'Change', 'ai-content-writer' ); ?>
     344                                </a>
     345                            </p>
     346                        </div>
     347                    </div>
     348                    <div class="aicw-sidebar__footer space-between">
    326349                        <input type="hidden" name="id" value="<?php echo esc_attr( $campaign->ID ); ?>"/>
    327350                        <input type="hidden" name="action" value="aicw_edit_campaign"/>
    328351                        <?php wp_nonce_field( 'aicw_edit_campaign' ); ?>
     352                        <button type="button" id='aicw_run_campaign' class="button" data-campaign-id="<?php echo esc_attr( $campaign->ID ); ?>"><?php esc_html_e( 'Run Campaign', 'ai-content-writer' ); ?></button>
     353                        <span id ="aicw_run_campaign_spinner" class="spinner"></span>
    329354                        <?php submit_button( __( 'Save Changes', 'ai-content-writer' ), 'primary', 'edit_campaign' ); ?>
    330355                    </div>
  • ai-content-writer/trunk/includes/Admin/views/settings.php

    r3326474 r3357556  
    7171                    <div class="field">
    7272                        <select name="aicw_chatgpt_ai_model" id="aicw_chatgpt_ai_model" class="regular-text">
     73                            <option value="gpt-5" <?php selected( get_option( 'aicw_chatgpt_ai_model' ), 'gpt-5' ); ?>><?php esc_html_e( 'GPT-5 (Latest, Multimodal)', 'ai-content-writer' ); ?></option>
     74                            <option value="gpt-5-mini" <?php selected( get_option( 'aicw_chatgpt_ai_model' ), 'gpt-5-mini' ); ?>><?php esc_html_e( 'GPT-5 Mini (Faster, Cheaper)', 'ai-content-writer' ); ?></option>
     75                            <option value="gpt-5-nano" <?php selected( get_option( 'aicw_chatgpt_ai_model' ), 'gpt-5-nano' ); ?>><?php esc_html_e( 'GPT-5 Nano (Lightweight)', 'ai-content-writer' ); ?></option>
     76                            <option value="gpt-4.1" <?php selected( get_option( 'aicw_chatgpt_ai_model' ), 'gpt-4.1' ); ?>><?php esc_html_e( 'GPT-4.1 (Advanced, Long Context)', 'ai-content-writer' ); ?></option>
     77                            <option value="gpt-4-turbo" <?php selected( get_option( 'aicw_chatgpt_ai_model' ), 'gpt-4-turbo' ); ?>><?php esc_html_e( 'GPT-4 Turbo', 'ai-content-writer' ); ?></option>
    7378                            <option value="gpt-3.5-turbo" <?php selected( get_option( 'aicw_chatgpt_ai_model' ), 'gpt-3.5-turbo' ); ?>><?php esc_html_e( 'GPT-3.5 Turbo', 'ai-content-writer' ); ?></option>
    74                             <option value="gpt-4" <?php selected( get_option( 'aicw_chatgpt_ai_model' ), 'gpt-4o' ); ?>><?php esc_html_e( 'GPT-4o', 'ai-content-writer' ); ?></option>
    75                             <option value="gpt-4o-mini" <?php selected( get_option( 'aicw_chatgpt_ai_model' ), 'gpt-4o-mini' ); ?>><?php esc_html_e( 'GPT-4o Mini', 'ai-content-writer' ); ?></option>
    76                             <option value="gpt-4-turbo" <?php selected( get_option( 'aicw_chatgpt_ai_model' ), 'gpt-4-turbo' ); ?>><?php esc_html_e( 'GPT-4 Turbo', 'ai-content-writer' ); ?></option>
    7779                        </select>
    7880                        <p class="description"><?php esc_html_e( 'Select the ChatGPT AI model to generate content.', 'ai-content-writer' ); ?></p>
  • ai-content-writer/trunk/includes/Campaigns/Articles.php

    r3295814 r3357556  
    7070        // Generate host URL for Bing search with keywords.
    7171        $keyword = rawurlencode( $keyword );
    72         $url     = trailingslashit( $host ) . "search?q=$keyword&count=20&loc=en&first=10";
     72        $url     = trailingslashit( $host ) . "search?q=$keyword&count=20&setlang=en&first=10";
    7373
    7474        // Initialize HTML dom.
     
    9696        foreach ( $results as $a ) {
    9797            $title = wp_strip_all_tags( $a->plaintext );
    98             $link  = esc_url( $a->href );
     98            $link  = $a->href;
     99
     100            // Decode the Bing URL if it contains 'bing.com/ck/'.
     101            if ( str_contains( $link, 'bing.com/ck/' ) ) {
     102                $link = aicw_decode_bing_url( $link );
     103            } else {
     104                $link = esc_url( $link );
     105            }
    99106
    100107            if ( empty( $title ) || empty( $link ) ) {
  • ai-content-writer/trunk/includes/Cron.php

    r3295814 r3357556  
    2121    public function __construct() {
    2222        add_action( 'init', array( $this, 'schedule_cron' ) );
     23        add_filter( 'cron_schedules', array( __CLASS__, 'add_cron_intervals' ) );
    2324
    2425        // Execute cron job to generate titles, content & thumbnails.
    25         add_action( 'aicw_generate_title', array( $this, 'generate_titles' ) );
    26         add_action( 'aicw_generate_content', array( $this, 'generate_content' ) );
    27         add_action( 'aicw_generate_thumbnail', array( $this, 'generate_thumbnails' ) );
    28         add_action( 'aicw_publish_posts', array( $this, 'publish_posts' ) );
     26        add_action( 'aicw_generate_title', array( __CLASS__, 'generate_titles' ) );
     27        add_action( 'aicw_generate_content', array( __CLASS__, 'generate_content' ) );
     28        add_action( 'aicw_generate_thumbnail', array( __CLASS__, 'generate_thumbnails' ) );
     29        add_action( 'aicw_publish_posts', array( __CLASS__, 'publish_posts' ) );
    2930    }
    3031
     
    6162
    6263    /**
     64     * Add custom cron intervals.
     65     *
     66     * @param array $schedules The existing cron schedules.
     67     *
     68     * @since 2.0.5
     69     * @return array The modified cron schedules.
     70     */
     71    public static function add_cron_intervals( $schedules ) {
     72        $schedules['aicw_15_minutes'] = array(
     73            'interval' => 900, // 15 minutes in seconds.
     74            'display'  => __( 'Every 15 Minutes', 'ai-content-writer' ),
     75        );
     76        $schedules['aicw_30_minutes'] = array(
     77            'interval' => 1800, // 30 minutes in seconds.
     78            'display'  => __( 'Every 30 Minutes', 'ai-content-writer' ),
     79        );
     80
     81        return $schedules;
     82    }
     83
     84    /**
    6385     * Generate titles.
     86     *
     87     * @param array $args The arguments.
    6488     *
    6589     * @since 1.4.0
    6690     * @return void
    6791     */
    68     public function generate_titles() {
    69         // Get all posts.
    70         $campaigns = aicw_get_campaigns(
    71             array(
    72                 'posts_per_page' => -1,
    73                 'orderby'        => 'modified',
    74                 'order'          => 'ASC',
    75                 'post_status'    => 'publish',
    76             )
    77         );
     92    public static function generate_titles( $args = array() ) {
     93        $defaults = array(
     94            'posts_per_page' => -1,
     95            'orderby'        => 'modified',
     96            'order'          => 'ASC',
     97            'post_status'    => 'publish',
     98        );
     99
     100        $args = wp_parse_args( $args, $defaults );
     101
     102        // Get campaigns.
     103        $campaigns = aicw_get_campaigns( $args );
    78104
    79105        // Loop through each campaign.
     
    107133                break;
    108134            } else {
    109                 // Now request the OpenAI to generate the titles depending on the keywords.
     135                // Now request the AI Model to generate the titles depending on the keywords.
    110136                $type   = empty( $type ) ? get_option( 'aicw_api_model' ) : $type; // TODO: We will remove this option in the future. It's already remove from the settings page.
    111                 $titles = aicw_generate_titles( $type, $keywords );
     137                $titles = aicw_generate_titles( $type, $keywords, $posts_needed );
    112138            }
    113139
     
    119145                }
    120146
    121                 // Check if the line starts with a number followed by a dot and space (e.g., "10. "). If not then skip the line.
    122                 if ( ! preg_match( '/^\d+\.\s/', $title ) ) {
     147                // Check if the line starts with a number followed by a dot and space OR dash and space (e.g., "10. " OR "- "). If not then skip the line.
     148                if ( ! preg_match( '/^(\d+\.\s|- )/', $title ) ) {
    123149                    continue;
    124150                }
    125151
    126                 // Remove leading number, dot, and space (e.g., "10. ").
    127                 $title = preg_replace( '/^\d+\.\s*/', '', $title );
     152                // Remove leading number, dot, and space OR dash/space (e.g., "10. " OR "- ").
     153                $title = preg_replace( '/^(\d+\.\s*|- )/', '', $title );
    128154
    129155                // Remove surrounding quotes if present.
     
    175201     * Generate content.
    176202     *
     203     * @param array $args The arguments.
     204     *
    177205     * @since 1.4.0
    178206     * @return void
    179207     */
    180     public function generate_content() {
     208    public static function generate_content( $args = array() ) {
     209        $defaults = array(
     210            'post_type'      => 'aicw_post',
     211            'posts_per_page' => -1,
     212            'orderby'        => 'modified',
     213            'order'          => 'ASC',
     214            'post_status'    => 'pending',
     215        );
     216
     217        $args = wp_parse_args( $args, $defaults );
     218
    181219        // Get all posts.
    182         $posts = get_posts(
    183             array(
    184                 'post_type'      => 'aicw_post',
    185                 'posts_per_page' => -1,
    186                 'orderby'        => 'modified',
    187                 'order'          => 'ASC',
    188                 'post_status'    => 'pending',
    189             )
    190         );
     220        $posts = get_posts( $args );
    191221
    192222        // Loop through each post.
     
    198228            $campaign_id = get_post_meta( $post_id, '_aicw_campaign_id', true );
    199229
     230            // Delete the post as it is not associated with any campaign.
     231            if ( empty( $campaign_id ) || ! aicw_get_campaign( $campaign_id ) ) {
     232                wp_delete_post( $post_id, true );
     233                continue;
     234            }
     235
    200236            // Check if the post needs generating content.
    201237            $needs_update = aicw_temp_post_needs_update( $post, $campaign_id );
     
    222258            }
    223259
    224             $is_updated = false;
    225260            // Check if the campaign type is articles or rss-feed.
    226261            if ( 'articles' === $campaign_type ) {
     
    269304     * Generate thumbnails.
    270305     *
     306     * @param array $args The arguments.
     307     *
    271308     * @since 1.4.0
    272309     * @return void
    273310     */
    274     public function generate_thumbnails() {
     311    public static function generate_thumbnails( $args = array() ) {
     312        $defaults = array(
     313            'post_type'      => 'aicw_post',
     314            'posts_per_page' => -1,
     315            'orderby'        => 'modified',
     316            'order'          => 'ASC',
     317            'post_status'    => 'pending',
     318        );
     319
     320        $args = wp_parse_args( $args, $defaults );
     321
    275322        // Get all posts.
    276         $posts = get_posts(
    277             array(
    278                 'post_type'      => 'aicw_post',
    279                 'posts_per_page' => -1,
    280                 'orderby'        => 'modified',
    281                 'order'          => 'ASC',
    282                 'post_status'    => 'pending',
    283             )
    284         );
     323        $posts = get_posts( $args );
    285324
    286325        // Loop through each post.
     
    291330            // Get the associated campaign ID.
    292331            $campaign_id = get_post_meta( $post_id, '_aicw_campaign_id', true );
     332
     333            // Delete the post as it is not associated with any campaign.
     334            if ( empty( $campaign_id ) || ! aicw_get_campaign( $campaign_id ) ) {
     335                wp_delete_post( $post_id, true );
     336                continue;
     337            }
    293338
    294339            // Check if the post needs generating thumbnail.
     
    353398     * This will publish the generated posts that are in pending status and completed all the steps.
    354399     *
     400     * @param array $args The arguments.
     401     *
    355402     * @since 1.4.0
    356403     * @return void
    357404     */
    358     public function publish_posts() {
     405    public static function publish_posts( $args = array() ) {
     406        $defaults = array(
     407            'post_type'      => 'aicw_post',
     408            'posts_per_page' => -1,
     409            'orderby'        => 'modified',
     410            'order'          => 'ASC',
     411            'post_status'    => 'pending',
     412        );
     413
     414        $args = wp_parse_args( $args, $defaults );
     415
    359416        // Get all posts.
    360         $posts = get_posts(
    361             array(
    362                 'post_type'      => 'aicw_post',
    363                 'posts_per_page' => -1,
    364                 'orderby'        => 'modified',
    365                 'order'          => 'ASC',
    366                 'post_status'    => 'pending',
    367             )
    368         );
     417        $posts = get_posts( $args );
    369418
    370419        // Loop through each post.
  • ai-content-writer/trunk/includes/Plugin.php

    r3306156 r3357556  
    326326        $max_tokens       = isset( $prompt_data['max_tokens'] ) ? $prompt_data['max_tokens'] : 1000;
    327327        $temperature      = isset( $prompt_data['temperature'] ) ? $prompt_data['temperature'] : 0.7;
    328         $chatgpt_ai_model = get_option( 'aicw_chatgpt_ai_model', 'gpt-3.5-turbo' );
     328        $chatgpt_ai_model = get_option( 'aicw_chatgpt_ai_model', 'gpt-5' );
     329
     330        // Allow long-running requests (e.g., GPT-5 article generation).
     331        if ( function_exists( 'set_time_limit' ) ) {
     332            set_time_limit( 300 );
     333
     334            // phpcs:disable
     335            // TODO: Need to handle potential error logs when using set_time_limit in PHP 8+.
     336            // try {
     337            // set_time_limit( 300 ); // 5 minutes
     338            // } catch ( \Throwable $e ) {
     339            // error_log( 'Failed to set execution time: ' . $e->getMessage() );
     340            // }
     341            // phpcs:enable
     342        }
    329343
    330344        // Define the API URL.
     
    351365        );
    352366
     367        // Adjust parameter for specific OpenAI models like GPT-5 series.
     368        if ( in_array( $chatgpt_ai_model, array( 'gpt-5', 'gpt-5-mini', 'gpt-5-nano' ), true ) ) {
     369            unset( $data['max_tokens'], $data['temperature'], $data['top_p'], $data['frequency_penalty'], $data['presence_penalty'] );
     370
     371            // Add correct token limit for GPT-5.
     372            $data['max_completion_tokens'] = $max_tokens;
     373        }
     374
    353375        // Set up the arguments for the request.
    354376        $args = array(
  • ai-content-writer/trunk/includes/functions.php

    r3295814 r3357556  
    139139 * @param string $type The type of the campaign.
    140140 * @param string $keywords The campaign keywords.
     141 * @param int    $needed_count The number of titles to generate.
    141142 *
    142143 * @since 1.4.0
    143144 * @return array The generated titles.
    144145 */
    145 function aicw_generate_titles( $type, $keywords ) {
     146function aicw_generate_titles( $type, $keywords, $needed_count = 20 ) {
    146147    if ( empty( $type ) || empty( $keywords ) ) {
    147148        return array();
    148149    }
     150
     151    // Initialize titles needed count.
     152    $needed_count = empty( $needed_count ) ? 20 : ( absint( $needed_count ) + 20 );
    149153
    150154    if ( 'gemini' === $type ) {
     
    165169                    'parts' => array(
    166170                        array(
    167                             'text' => 'You are experienced in writing about ' . $keywords . '. Please generate more than 20 SEO friendly titles for these keywords.',
     171                            'text' => 'You are experienced in writing about ' . $keywords . '. Please generate ' . $needed_count . ' SEO friendly titles for these keywords.',
    168172                        ),
    169173                    ),
     
    212216
    213217        // Call OpenAI API to generate titles.
    214         $api_url = 'https://api.openai.com/v1/chat/completions';
     218        $chatgpt_ai_model = get_option( 'aicw_chatgpt_ai_model', 'gpt-5' );
     219        $api_url          = 'https://api.openai.com/v1/chat/completions';
    215220
    216221        // The data payload to send to the OpenAI API.
    217222        $data = array(
    218             'model'             => 'gpt-3.5-turbo',
     223            'model'             => $chatgpt_ai_model,
    219224            'messages'          => array(
    220225                array(
     
    224229                array(
    225230                    'role'    => 'user',
    226                     'content' => 'Generate more than 20 titles for these keywords: ' . $keywords,
     231                    'content' => 'Generate ' . $needed_count . ' titles for these keywords: ' . $keywords,
    227232                ),
    228233            ),
     
    233238            'presence_penalty'  => 0,
    234239        );
     240
     241        // Adjust parameter for specific OpenAI models like GPT-5 series.
     242        if ( in_array( $chatgpt_ai_model, array( 'gpt-5', 'gpt-5-mini', 'gpt-5-nano' ), true ) ) {
     243            unset( $data['max_tokens'], $data['temperature'], $data['top_p'], $data['frequency_penalty'], $data['presence_penalty'] );
     244        }
    235245
    236246        // Set up the arguments for the request.
     
    382392        }
    383393
    384         $max_tokens  = 1000;
     394        $max_tokens  = 5000;
    385395        $temperature = 0.7;
    386396
     
    412422            'prompt'      => $prompt,
    413423            'system_tone' => $system_tone,
    414             'max_tokens'  => empty( $max_tokens ) ? 1000 : absint( $max_tokens ),
     424            'max_tokens'  => empty( $max_tokens ) ? 5000 : absint( $max_tokens ),
    415425            'temperature' => empty( $temperature ) ? 0.7 : floatval( $temperature ),
    416426        );
     
    674684    <?php
    675685}
     686
     687/**
     688 * Decode Bing URL.
     689 * This function decodes a Bing URL to extract the original URL.
     690 *
     691 * @param string $href The Bing URL.
     692 *
     693 * @since 2.0.5
     694 * @return string|false The decoded URL or false if not found or invalid.
     695 */
     696function aicw_decode_bing_url( $href ) {
     697    $query = wp_parse_url( $href, PHP_URL_QUERY );
     698    if ( empty( $query ) ) {
     699        return false;
     700    }
     701
     702    parse_str( $query, $params );
     703
     704    if ( ! empty( $params['u'] ) ) {
     705        $u = rawurldecode( $params['u'] );
     706
     707        // Find position of "aHR0" (start of actual Base64 for https).
     708        $pos = strpos( $u, 'aHR0' );
     709        if ( false !== $pos ) {
     710            $u = substr( $u, $pos );
     711        }
     712
     713        // Convert URL-safe Base64 to standard Base64.
     714        $u = strtr( $u, '-_', '+/' );
     715
     716        // Add padding.
     717        $padding = strlen( $u ) % 4;
     718        if ( $padding > 0 ) { $u .= str_repeat( '=', 4 - $padding );
     719        }
     720
     721        // Decode the Base64 string. The base64_decode function is safe here as we are validating the input.
     722        $decoded_url = base64_decode( $u, true ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_decode
     723        if ( false !== $decoded_url ) {
     724            return esc_url_raw( $decoded_url );
     725        }
     726    }
     727
     728    return false;
     729}
     730
     731
     732
  • ai-content-writer/trunk/languages/ai-content-writer.pot

    r3326474 r3357556  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: AI Content Writer 2.0.4\n"
     5"Project-Id-Version: AI Content Writer 2.0.5\n"
    66"Report-Msgid-Bugs-To: https://beautifulplugins.com/support/\n"
    7 "POT-Creation-Date: 2025-07-11 18:20:52+00:00\n"
     7"POT-Creation-Date: 2025-09-07 23:34:34+00:00\n"
    88"MIME-Version: 1.0\n"
    99"Content-Type: text/plain; charset=utf-8\n"
     
    2525"X-Generator: grunt-wp-i18n 1.0.3\n"
    2626
    27 #: includes/Admin/Actions.php:42 includes/Admin/Actions.php:141
    28 #: includes/Admin/Actions.php:243 includes/Admin/Actions.php:295
    29 #: includes/Admin/Actions.php:535 includes/Admin/Actions.php:592
    30 #: includes/Admin/Admin.php:292 includes/Admin/Dashboard.php:36
     27#: includes/Admin/Actions.php:47 includes/Admin/Actions.php:146
     28#: includes/Admin/Actions.php:248 includes/Admin/Actions.php:300
     29#: includes/Admin/Actions.php:540 includes/Admin/Actions.php:597
     30#: includes/Admin/Actions.php:640 includes/Admin/Admin.php:292
     31#: includes/Admin/Dashboard.php:36
    3132msgid "You do not have permission to perform this action."
    3233msgstr ""
    3334
    34 #: includes/Admin/Actions.php:55 includes/Admin/Actions.php:161
     35#: includes/Admin/Actions.php:60 includes/Admin/Actions.php:166
    3536msgid "Title is required. Please enter the campaign title."
    3637msgstr ""
    3738
    38 #: includes/Admin/Actions.php:61 includes/Admin/Actions.php:167
     39#: includes/Admin/Actions.php:66 includes/Admin/Actions.php:172
    3940msgid "Campaign type is required. Please select the campaign type."
    4041msgstr ""
    4142
    42 #: includes/Admin/Actions.php:67 includes/Admin/Actions.php:173
     43#: includes/Admin/Actions.php:72 includes/Admin/Actions.php:178
    4344msgid "Keywords are required. Please enter the keywords."
    4445msgstr ""
    4546
    46 #: includes/Admin/Actions.php:73 includes/Admin/Actions.php:179
     47#: includes/Admin/Actions.php:78 includes/Admin/Actions.php:184
    4748msgid "RSS feed link is required. Please enter the RSS feed link."
    4849msgstr ""
    4950
    50 #: includes/Admin/Actions.php:121
     51#: includes/Admin/Actions.php:126
    5152msgid "Campaign added successfully."
    5253msgstr ""
    5354
    54 #: includes/Admin/Actions.php:155
     55#: includes/Admin/Actions.php:160 includes/Admin/Actions.php:649
    5556msgid "Invalid campaign. Please try again."
    5657msgstr ""
    5758
    58 #: includes/Admin/Actions.php:227
     59#: includes/Admin/Actions.php:232
    5960msgid "Campaign updated successfully."
    6061msgstr ""
    6162
    62 #: includes/Admin/Actions.php:279
     63#: includes/Admin/Actions.php:284
    6364msgid "Settings saved successfully."
    6465msgstr ""
    6566
    66 #: includes/Admin/Actions.php:303 includes/Admin/views/generate-content.php:59
     67#: includes/Admin/Actions.php:308 includes/Admin/views/generate-content.php:59
    6768msgid "English"
    6869msgstr ""
    6970
    70 #: includes/Admin/Actions.php:310 includes/Admin/views/generate-content.php:81
    71 #: includes/Plugin.php:325 includes/functions.php:381
     71#: includes/Admin/Actions.php:315 includes/Admin/views/generate-content.php:81
     72#: includes/Plugin.php:325 includes/functions.php:391
    7273msgid ""
    7374"You are an expert SEO content writer. Generate factually accurate, "
     
    7677msgstr ""
    7778
    78 #: includes/Admin/Actions.php:318
     79#: includes/Admin/Actions.php:323
    7980msgid "Title is required. Please, start with \"Write an article on...\""
    8081msgstr ""
    8182
    82 #: includes/Admin/Actions.php:324
     83#: includes/Admin/Actions.php:329
    8384msgid "Prompt type is required. Please, select the prompt type."
    8485msgstr ""
    8586
    86 #: includes/Admin/Actions.php:330
     87#: includes/Admin/Actions.php:335
    8788msgid "Language is required. Please, select the language."
    8889msgstr ""
    8990
    90 #: includes/Admin/Actions.php:336
     91#: includes/Admin/Actions.php:341
    9192msgid "Post type is required. Please, select the post type."
    9293msgstr ""
    9394
    94 #: includes/Admin/Actions.php:347 includes/Plugin.php:237
     95#: includes/Admin/Actions.php:352 includes/Plugin.php:237
    9596msgid ""
    9697"Please configure the API settings. A valid Gemini API key is required to "
     
    9899msgstr ""
    99100
    100 #: includes/Admin/Actions.php:426
     101#: includes/Admin/Actions.php:431
    101102msgid ""
    102103"Please configure the API settings. A valid ChatGPT API secret key is "
     
    104105msgstr ""
    105106
    106 #: includes/Admin/Actions.php:434
     107#: includes/Admin/Actions.php:439
    107108#. translators: 1: Prompt Content, 2: System Tone, 3: Language, 4: Min Words
    108109msgid ""
     
    126127msgstr ""
    127128
    128 #: includes/Admin/Actions.php:449 includes/functions.php:405
     129#: includes/Admin/Actions.php:454 includes/functions.php:415
    129130msgid "The article should be optimized for SEO"
    130131msgstr ""
    131132
    132 #: includes/Admin/Actions.php:449 includes/functions.php:405
     133#: includes/Admin/Actions.php:454 includes/functions.php:415
    133134msgid "The article should be optimized for SEO, including relevant keywords: "
    134135msgstr ""
    135136
    136 #: includes/Admin/Actions.php:476
     137#: includes/Admin/Actions.php:481
    137138msgid "Invalid API model. Please configure the API settings."
    138139msgstr ""
    139140
    140 #: includes/Admin/Actions.php:514 includes/Admin/Actions.php:519
     141#: includes/Admin/Actions.php:519 includes/Admin/Actions.php:524
    141142msgid "Content generated successfully."
    142143msgstr ""
    143144
    144 #: includes/Admin/Actions.php:544 includes/Admin/Actions.php:602
     145#: includes/Admin/Actions.php:549 includes/Admin/Actions.php:607
    145146msgid "Invalid post. Please try again."
    146147msgstr ""
    147148
    148 #: includes/Admin/Actions.php:550
     149#: includes/Admin/Actions.php:555
    149150msgid "Invalid image. Please select an image."
    150151msgstr ""
    151152
    152 #: includes/Admin/Actions.php:560
     153#: includes/Admin/Actions.php:565
    153154msgid "Invalid image URL. Please try again."
    154155msgstr ""
    155156
    156 #: includes/Admin/Actions.php:574
     157#: includes/Admin/Actions.php:579
    157158msgid "Content generated and featured image set successfully."
    158159msgstr ""
    159160
    160 #: includes/Admin/Actions.php:611
     161#: includes/Admin/Actions.php:616
    161162msgid "Post deleted successfully."
    162163msgstr ""
    163164
    164 #: includes/Admin/Actions.php:618
     165#: includes/Admin/Actions.php:623
    165166msgid "Failed to delete the post. Please try again."
     167msgstr ""
     168
     169#: includes/Admin/Actions.php:658
     170msgid "Campaign not found. Please try again."
     171msgstr ""
     172
     173#: includes/Admin/Actions.php:706
     174msgid "Campaign run successfully."
    166175msgstr ""
    167176
     
    245254#: includes/Admin/ListTables/CampaignsListTable.php:170
    246255#: includes/Admin/ListTables/CampaignsListTable.php:183
    247 #: includes/Admin/views/edit-campaign.php:273 includes/functions.php:671
     256#: includes/Admin/views/edit-campaign.php:288 includes/functions.php:681
    248257msgid "Delete"
    249258msgstr ""
     
    251260#: includes/Admin/ListTables/CampaignsListTable.php:215
    252261#: includes/Admin/views/add-campaign.php:221
    253 #: includes/Admin/views/edit-campaign.php:315
     262#: includes/Admin/views/edit-campaign.php:329
    254263msgid "Active"
    255264msgstr ""
     
    268277#: includes/Admin/views/edit-campaign.php:125
    269278#: includes/Admin/views/edit-campaign.php:169
    270 #: includes/Admin/views/edit-campaign.php:307
     279#: includes/Admin/views/edit-campaign.php:322
    271280msgid "This feature is available in the Pro version"
    272281msgstr ""
     
    278287#: includes/Admin/views/edit-campaign.php:125
    279288#: includes/Admin/views/edit-campaign.php:169
    280 #: includes/Admin/views/edit-campaign.php:307 includes/Plugin.php:131
     289#: includes/Admin/views/edit-campaign.php:322 includes/Plugin.php:131
    281290msgid "Go Pro"
    282291msgstr ""
     
    284293#: includes/Admin/Settings.php:41
    285294msgid ""
    286 "Select the frequency (hourly, twice daily, daily, weekly) for the campaign "
    287 "to run automatically. This will be used to schedule the campaigns to run at "
    288 "the specified frequency to generate content."
     295"Select the frequency (every 15 minutes, every 30 minutes, hourly, twice "
     296"daily, daily, weekly) for the campaign to run automatically. This will be "
     297"used to schedule the campaigns to run at the specified frequency to "
     298"generate content."
    289299msgstr ""
    290300
    291301#: includes/Admin/views/add-campaign.php:19
    292 #: includes/Admin/views/add-campaign.php:234
     302#: includes/Admin/views/add-campaign.php:243
    293303msgid "Add Campaign"
    294304msgstr ""
     
    335345#: includes/Admin/views/add-campaign.php:55
    336346#: includes/Admin/views/edit-campaign.php:58
    337 #: includes/Admin/views/settings.php:104
     347#: includes/Admin/views/settings.php:106
    338348msgid "Gemini"
    339349msgstr ""
     
    341351#: includes/Admin/views/add-campaign.php:56
    342352#: includes/Admin/views/edit-campaign.php:59
    343 #: includes/Admin/views/settings.php:105
     353#: includes/Admin/views/settings.php:107
    344354msgid "ChatGPT"
    345355msgstr ""
     
    534544
    535545#: includes/Admin/views/add-campaign.php:202
    536 #: includes/Admin/views/edit-campaign.php:295
     546#: includes/Admin/views/edit-campaign.php:310
    537547msgid "Campaign Actions"
    538548msgstr ""
    539549
    540550#: includes/Admin/views/add-campaign.php:206
    541 #: includes/Admin/views/edit-campaign.php:299
     551#: includes/Admin/views/edit-campaign.php:314
    542552msgid "Campaign Target"
    543553msgstr ""
    544554
    545555#: includes/Admin/views/add-campaign.php:212
    546 #: includes/Admin/views/edit-campaign.php:305
     556#: includes/Admin/views/edit-campaign.php:320
    547557msgid "Target number of posts to generate."
    548558msgstr ""
    549559
    550560#: includes/Admin/views/add-campaign.php:213
    551 #: includes/Admin/views/edit-campaign.php:306
     561#: includes/Admin/views/edit-campaign.php:321
    552562msgid "Upgrading to Pro version will increase the limit."
    553563msgstr ""
    554564
    555565#: includes/Admin/views/add-campaign.php:218
    556 #: includes/Admin/views/edit-campaign.php:312
     566#: includes/Admin/views/edit-campaign.php:326
    557567msgid "Campaign Status"
    558568msgstr ""
    559569
    560570#: includes/Admin/views/add-campaign.php:222
    561 #: includes/Admin/views/add-campaign.php:279
    562 #: includes/Admin/views/edit-campaign.php:316
    563 #: includes/Admin/views/edit-campaign.php:374
     571#: includes/Admin/views/add-campaign.php:288
     572#: includes/Admin/views/edit-campaign.php:330
     573#: includes/Admin/views/edit-campaign.php:399
    564574#: includes/Admin/views/generate-content.php:151
    565575msgid "Draft"
     
    567577
    568578#: includes/Admin/views/add-campaign.php:223
    569 #: includes/Admin/views/add-campaign.php:280
    570 #: includes/Admin/views/edit-campaign.php:317
    571 #: includes/Admin/views/edit-campaign.php:375
     579#: includes/Admin/views/add-campaign.php:289
     580#: includes/Admin/views/edit-campaign.php:331
     581#: includes/Admin/views/edit-campaign.php:400
    572582#: includes/Admin/views/generate-content.php:152
    573583msgid "Pending"
     
    575585
    576586#: includes/Admin/views/add-campaign.php:227
    577 #: includes/Admin/views/edit-campaign.php:321
     587#: includes/Admin/views/edit-campaign.php:335
    578588#: includes/Admin/views/generate-content.php:156
    579589msgid "Select the status of the campaign."
    580590msgstr ""
    581591
    582 #: includes/Admin/views/add-campaign.php:241
    583 #: includes/Admin/views/edit-campaign.php:336
     592#: includes/Admin/views/add-campaign.php:232
     593#: includes/Admin/views/edit-campaign.php:340
     594msgid "Campaign Frequency: "
     595msgstr ""
     596
     597#: includes/Admin/views/add-campaign.php:235
     598#: includes/Admin/views/edit-campaign.php:343
     599msgid "Change"
     600msgstr ""
     601
     602#: includes/Admin/views/add-campaign.php:250
     603#: includes/Admin/views/edit-campaign.php:361
    584604msgid "Publish Content as"
    585605msgstr ""
    586606
    587 #: includes/Admin/views/add-campaign.php:242
    588 #: includes/Admin/views/edit-campaign.php:337
     607#: includes/Admin/views/add-campaign.php:251
     608#: includes/Admin/views/edit-campaign.php:362
    589609#: includes/Admin/views/generate-content.php:110
    590610msgid "Type"
    591611msgstr ""
    592612
    593 #: includes/Admin/views/add-campaign.php:248
    594 #: includes/Admin/views/edit-campaign.php:343
     613#: includes/Admin/views/add-campaign.php:257
     614#: includes/Admin/views/edit-campaign.php:368
    595615#: includes/Admin/views/generate-content.php:116
    596616msgid "Post Type"
    597617msgstr ""
    598618
    599 #: includes/Admin/views/add-campaign.php:268
    600 #: includes/Admin/views/edit-campaign.php:363
     619#: includes/Admin/views/add-campaign.php:277
     620#: includes/Admin/views/edit-campaign.php:388
    601621#: includes/Admin/views/generate-content.php:136
    602622msgid "Select the post type to publish the content."
    603623msgstr ""
    604624
    605 #: includes/Admin/views/add-campaign.php:273
    606 #: includes/Admin/views/edit-campaign.php:368
     625#: includes/Admin/views/add-campaign.php:282
     626#: includes/Admin/views/edit-campaign.php:393
    607627msgid "Completed Post Status"
    608628msgstr ""
    609629
    610 #: includes/Admin/views/add-campaign.php:278
    611 #: includes/Admin/views/edit-campaign.php:373
     630#: includes/Admin/views/add-campaign.php:287
     631#: includes/Admin/views/edit-campaign.php:398
    612632#: includes/Admin/views/generate-content.php:150
    613633msgid "Publish"
    614634msgstr ""
    615635
    616 #: includes/Admin/views/add-campaign.php:284
    617 #: includes/Admin/views/edit-campaign.php:379
     636#: includes/Admin/views/add-campaign.php:293
     637#: includes/Admin/views/edit-campaign.php:404
    618638msgid ""
    619639"Select the status of the generated posts. This will be used while "
     
    621641msgstr ""
    622642
    623 #: includes/Admin/views/add-campaign.php:292
    624 #: includes/Admin/views/edit-campaign.php:387
     643#: includes/Admin/views/add-campaign.php:301
     644#: includes/Admin/views/edit-campaign.php:412
    625645msgid "Campaign Settings"
    626646msgstr ""
    627647
    628 #: includes/Admin/views/add-campaign.php:298
    629 #: includes/Admin/views/edit-campaign.php:393
     648#: includes/Admin/views/add-campaign.php:307
     649#: includes/Admin/views/edit-campaign.php:418
    630650msgid "Generate Thumbnail"
    631651msgstr ""
    632652
    633 #: includes/Admin/views/add-campaign.php:301
    634 #: includes/Admin/views/edit-campaign.php:396
     653#: includes/Admin/views/add-campaign.php:310
     654#: includes/Admin/views/edit-campaign.php:421
    635655msgid "Enable to generate a thumbnail for the each campaigns generated content."
    636656msgstr ""
     
    697717
    698718#: includes/Admin/views/edit-campaign.php:213
    699 #: includes/Admin/views/edit-campaign.php:405
     719#: includes/Admin/views/edit-campaign.php:430
    700720msgid "Campaign Posts"
    701721msgstr ""
     
    716736
    717737#: includes/Admin/views/edit-campaign.php:239
     738msgid "Source"
     739msgstr ""
     740
     741#: includes/Admin/views/edit-campaign.php:240
    718742#: includes/Admin/views/generate-content.php:143
    719743msgid "Actions"
    720744msgstr ""
    721745
    722 #: includes/Admin/views/edit-campaign.php:282
     746#: includes/Admin/views/edit-campaign.php:278
     747msgid "View Source"
     748msgstr ""
     749
     750#: includes/Admin/views/edit-campaign.php:297
    723751msgid ""
    724752"No generated posts found for this campaign. Please wait while the posts are "
     
    727755msgstr ""
    728756
    729 #: includes/Admin/views/edit-campaign.php:329
    730 #: includes/Admin/views/settings.php:147
     757#: includes/Admin/views/edit-campaign.php:352
     758msgid "Run Campaign"
     759msgstr ""
     760
     761#: includes/Admin/views/edit-campaign.php:354
     762#: includes/Admin/views/settings.php:149
    731763msgid "Save Changes"
    732764msgstr ""
    733765
    734 #: includes/Admin/views/edit-campaign.php:406
     766#: includes/Admin/views/edit-campaign.php:431
    735767msgid "Completed"
    736768msgstr ""
    737769
    738 #: includes/Admin/views/edit-campaign.php:449
     770#: includes/Admin/views/edit-campaign.php:474
    739771msgid "No completed posts found for this campaign."
    740772msgstr ""
     
    10781110msgstr ""
    10791111
    1080 #: includes/Admin/views/help.php:117 includes/Admin/views/settings.php:156
     1112#: includes/Admin/views/help.php:117 includes/Admin/views/settings.php:158
    10811113msgid "Support"
    10821114msgstr ""
    10831115
    1084 #: includes/Admin/views/help.php:120 includes/Admin/views/settings.php:159
     1116#: includes/Admin/views/help.php:120 includes/Admin/views/settings.php:161
    10851117msgid "If you need help, please contact us."
    10861118msgstr ""
    10871119
    1088 #: includes/Admin/views/help.php:123 includes/Admin/views/settings.php:162
     1120#: includes/Admin/views/help.php:123 includes/Admin/views/settings.php:164
    10891121msgid "Contact Support"
    10901122msgstr ""
    10911123
    1092 #: includes/Admin/views/help.php:130 includes/Admin/views/settings.php:169
     1124#: includes/Admin/views/help.php:130 includes/Admin/views/settings.php:171
    10931125msgid "Our Popular Plugins"
    10941126msgstr ""
    10951127
    1096 #: includes/Admin/views/help.php:136 includes/Admin/views/settings.php:175
     1128#: includes/Admin/views/help.php:136 includes/Admin/views/settings.php:177
    10971129msgid "Send Emails – Newsletters, Automation & Email Marketing for WordPress"
    10981130msgstr ""
    10991131
    1100 #: includes/Admin/views/help.php:141 includes/Admin/views/settings.php:180
     1132#: includes/Admin/views/help.php:141 includes/Admin/views/settings.php:182
    11011133msgid "Essential Elements for WordPress"
    11021134msgstr ""
    11031135
    1104 #: includes/Admin/views/help.php:146 includes/Admin/views/settings.php:185
     1136#: includes/Admin/views/help.php:146 includes/Admin/views/settings.php:187
    11051137msgid "Shortcodes – Advanced Shortcode Manager"
    11061138msgstr ""
    11071139
    1108 #: includes/Admin/views/help.php:151 includes/Admin/views/settings.php:190
     1140#: includes/Admin/views/help.php:151 includes/Admin/views/settings.php:192
    11091141msgid "Post Showcase"
    11101142msgstr ""
    11111143
    1112 #: includes/Admin/views/help.php:156 includes/Admin/views/settings.php:195
     1144#: includes/Admin/views/help.php:156 includes/Admin/views/settings.php:197
    11131145msgid "SMS Manager – WooCommerce SMS Notifications"
    11141146msgstr ""
    11151147
    1116 #: includes/Admin/views/help.php:161 includes/Admin/views/settings.php:200
     1148#: includes/Admin/views/help.php:161 includes/Admin/views/settings.php:202
    11171149msgid "Invoice Payment"
    11181150msgstr ""
     
    11871219
    11881220#: includes/Admin/views/settings.php:73
     1221msgid "GPT-5 (Latest, Multimodal)"
     1222msgstr ""
     1223
     1224#: includes/Admin/views/settings.php:74
     1225msgid "GPT-5 Mini (Faster, Cheaper)"
     1226msgstr ""
     1227
     1228#: includes/Admin/views/settings.php:75
     1229msgid "GPT-5 Nano (Lightweight)"
     1230msgstr ""
     1231
     1232#: includes/Admin/views/settings.php:76
     1233msgid "GPT-4.1 (Advanced, Long Context)"
     1234msgstr ""
     1235
     1236#: includes/Admin/views/settings.php:77
     1237msgid "GPT-4 Turbo"
     1238msgstr ""
     1239
     1240#: includes/Admin/views/settings.php:78
    11891241msgid "GPT-3.5 Turbo"
    11901242msgstr ""
    11911243
    1192 #: includes/Admin/views/settings.php:74
    1193 msgid "GPT-4o"
    1194 msgstr ""
    1195 
    1196 #: includes/Admin/views/settings.php:75
    1197 msgid "GPT-4o Mini"
    1198 msgstr ""
    1199 
    1200 #: includes/Admin/views/settings.php:76
    1201 msgid "GPT-4 Turbo"
    1202 msgstr ""
    1203 
    1204 #: includes/Admin/views/settings.php:78
     1244#: includes/Admin/views/settings.php:80
    12051245msgid "Select the ChatGPT AI model to generate content."
    12061246msgstr ""
    12071247
    1208 #: includes/Admin/views/settings.php:82
     1248#: includes/Admin/views/settings.php:84
    12091249msgid "Image Settings"
    12101250msgstr ""
    12111251
    1212 #: includes/Admin/views/settings.php:83
     1252#: includes/Admin/views/settings.php:85
    12131253msgid ""
    12141254"The following options are the image settings for the AI Content Writer "
     
    12161256msgstr ""
    12171257
    1218 #: includes/Admin/views/settings.php:87
     1258#: includes/Admin/views/settings.php:89
    12191259msgid "Pexels API Key:"
    12201260msgstr ""
    12211261
    1222 #: includes/Admin/views/settings.php:91
     1262#: includes/Admin/views/settings.php:93
    12231263msgid ""
    12241264"Enter your Pexels API key. This key is required to generate thumbnails "
     
    12261266msgstr ""
    12271267
    1228 #: includes/Admin/views/settings.php:95
     1268#: includes/Admin/views/settings.php:97
    12291269msgid "Miscellaneous Settings"
    12301270msgstr ""
    12311271
    1232 #: includes/Admin/views/settings.php:96
     1272#: includes/Admin/views/settings.php:98
    12331273msgid ""
    12341274"The following options are the miscellaneous settings for the AI Content "
     
    12361276msgstr ""
    12371277
    1238 #: includes/Admin/views/settings.php:100
     1278#: includes/Admin/views/settings.php:102
    12391279msgid "API Model:"
    12401280msgstr ""
    12411281
    1242 #: includes/Admin/views/settings.php:107
     1282#: includes/Admin/views/settings.php:109
    12431283msgid ""
    12441284"Select the AI model to generate content using the instant content "
     
    12461286msgstr ""
    12471287
    1248 #: includes/Admin/views/settings.php:112
     1288#: includes/Admin/views/settings.php:114
    12491289msgid "Enable Image Generation:"
    12501290msgstr ""
    12511291
    1252 #: includes/Admin/views/settings.php:117
     1292#: includes/Admin/views/settings.php:119
    12531293msgid "Enable Thumbnail Image Generation"
    12541294msgstr ""
    12551295
    1256 #: includes/Admin/views/settings.php:119
     1296#: includes/Admin/views/settings.php:121
    12571297msgid ""
    12581298"Enable to activate the thumbnail image generation feature. AI generated "
     
    12611301msgstr ""
    12621302
    1263 #: includes/Admin/views/settings.php:124
     1303#: includes/Admin/views/settings.php:126
    12641304msgid "Enable Redirection:"
    12651305msgstr ""
    12661306
    1267 #: includes/Admin/views/settings.php:129
     1307#: includes/Admin/views/settings.php:131
    12681308msgid "Enable Redirection"
    12691309msgstr ""
    12701310
    1271 #: includes/Admin/views/settings.php:131
     1311#: includes/Admin/views/settings.php:133
    12721312msgid ""
    12731313"Enable to redirect to the edit page after successful generation of content "
     
    12751315msgstr ""
    12761316
    1277 #: includes/Plugin.php:296 includes/Plugin.php:380
     1317#: includes/Cron.php:74
     1318msgid "Every 15 Minutes"
     1319msgstr ""
     1320
     1321#: includes/Cron.php:78
     1322msgid "Every 30 Minutes"
     1323msgstr ""
     1324
     1325#: includes/Plugin.php:296 includes/Plugin.php:402
    12781326msgid "An unexpected error occurred while generating the content."
    12791327msgstr ""
     
    12891337msgstr ""
    12901338
    1291 #: includes/Plugin.php:401
     1339#: includes/Plugin.php:423
    12921340msgid ""
    12931341"Please configure the API settings. A valid Pexels API key is required to "
     
    12951343msgstr ""
    12961344
    1297 #: includes/Plugin.php:434
     1345#: includes/Plugin.php:456
    12981346msgid "An unexpected error occurred while generating the images."
    12991347msgstr ""
     
    13551403msgstr ""
    13561404
    1357 #: includes/functions.php:390
     1405#: includes/functions.php:400
    13581406#. translators: 1: Prompt Content, 2: System Tone, 3: Language
    13591407msgid ""
     
    13761424msgstr ""
    13771425
    1378 #: includes/functions.php:502
     1426#: includes/functions.php:512
    13791427msgid "The campaign is not found."
    13801428msgstr ""
    13811429
    1382 #: includes/functions.php:550
     1430#: includes/functions.php:560
    13831431msgid "The campaign target is reached."
    13841432msgstr ""
    13851433
    1386 #: includes/functions.php:665
     1434#: includes/functions.php:675
    13871435msgid "Keyword"
    13881436msgstr ""
    13891437
    1390 #: includes/functions.php:668
     1438#: includes/functions.php:678
    13911439msgid "Keyword 2"
    13921440msgstr ""
  • ai-content-writer/trunk/readme.txt

    r3326474 r3357556  
    33Tags: content writer, ai, content, writing, autoblog
    44Tested up to: 6.8
    5 Stable tag: 2.0.4
     5Stable tag: 2.0.5
    66License: GPLv2 or later
    77License URI: https://www.gnu.org/licenses/gpl-2.0.html
     
    186186
    187187== Changelog ==
     188= 2.0.5 (8 September 2025) =
     189* New: Added support for OenAI updated API models (gpt-5, gpt-5-mini, gpt-5-nano and more).
     190* New: Added support for running the campaign manually from the campaign edit page.
     191* New: Added support for decoding Bing.com or Bing.com/news source URLs to get the actual article title and content.
     192* Enhance: Improved the content generation accuracy and quality.
     193* Fix: Fixed minor bugs and improved performance.
     194
    188195= 2.0.4 (12th July 2025) =
    189196* New: Update plugin UI for better user experience.
     
    240247
    241248== Upgrade Notice ==
    242 = 2.0.0 =
     249= 2.0.5 =
    243250This version includes new features, enhancements, and bug fixes. We recommend upgrading to this version for the best experience and performance. Please refer to the changelog for more details on the changes made in this version.
  • ai-content-writer/trunk/vendor/composer/installed.php

    r3326474 r3357556  
    22    'root' => array(
    33        'name' => 'beautifulplugins/ai-content-writer',
    4         'pretty_version' => 'v2.0.4',
    5         'version' => '2.0.4.0',
    6         'reference' => '389c920b621fbc72b31752e6719d145d30d07968',
     4        'pretty_version' => 'v2.0.5',
     5        'version' => '2.0.5.0',
     6        'reference' => 'e3475dc577e55906706bba02adea2685b292b017',
    77        'type' => 'wordpress-plugin',
    88        'install_path' => __DIR__ . '/../../',
     
    1212    'versions' => array(
    1313        'beautifulplugins/ai-content-writer' => array(
    14             'pretty_version' => 'v2.0.4',
    15             'version' => '2.0.4.0',
    16             'reference' => '389c920b621fbc72b31752e6719d145d30d07968',
     14            'pretty_version' => 'v2.0.5',
     15            'version' => '2.0.5.0',
     16            'reference' => 'e3475dc577e55906706bba02adea2685b292b017',
    1717            'type' => 'wordpress-plugin',
    1818            'install_path' => __DIR__ . '/../../',
Note: See TracChangeset for help on using the changeset viewer.