Changeset 3357556
- Timestamp:
- 09/08/2025 12:33:46 AM (5 months ago)
- Location:
- ai-content-writer/trunk
- Files:
-
- 18 edited
-
ai-content-writer.php (modified) (2 diffs)
-
assets/css/aicw-admin-rtl.css (modified) (1 diff)
-
assets/css/aicw-admin.asset.php (modified) (1 diff)
-
assets/css/aicw-admin.css (modified) (1 diff)
-
assets/js/aicw-admin.asset.php (modified) (1 diff)
-
assets/js/aicw-admin.js (modified) (1 diff)
-
includes/Admin/Actions.php (modified) (4 diffs)
-
includes/Admin/Settings.php (modified) (1 diff)
-
includes/Admin/views/add-campaign.php (modified) (1 diff)
-
includes/Admin/views/edit-campaign.php (modified) (5 diffs)
-
includes/Admin/views/settings.php (modified) (1 diff)
-
includes/Campaigns/Articles.php (modified) (2 diffs)
-
includes/Cron.php (modified) (10 diffs)
-
includes/Plugin.php (modified) (2 diffs)
-
includes/functions.php (modified) (8 diffs)
-
languages/ai-content-writer.pot (modified) (32 diffs)
-
readme.txt (modified) (3 diffs)
-
vendor/composer/installed.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
ai-content-writer/trunk/ai-content-writer.php
r3326474 r3357556 4 4 * Plugin URI: https://beautifulplugins.com/ai-content-writer/ 5 5 * 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. 46 * Version: 2.0.5 7 7 * Requires at least: 5.0 8 8 * Requires PHP: 7.4 … … 47 47 */ 48 48 function ai_content_writer() { 49 return Plugin::create( __FILE__, '2.0. 4' );49 return Plugin::create( __FILE__, '2.0.5' ); 50 50 } 51 51 -
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()}));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),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 2 2 3 3 namespace AIContentWriter\Admin; 4 5 use AIContentWriter\Cron; 4 6 5 7 defined( 'ABSPATH' ) || exit; // Exit if accessed directly. … … 27 29 // Handle ajax request for deleting the campaigns temporarily post. 28 30 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' ) ); 29 34 } 30 35 … … 253 258 * @since 1.7.0 254 259 */ 255 do_action( 'aicw_before_update_settings' , $_POST);260 do_action( 'aicw_before_update_settings' ); 256 261 257 262 $allowed_hosts = isset( $_POST['aicw_allowed_hosts'] ) ? sanitize_textarea_field( wp_unslash( $_POST['aicw_allowed_hosts'] ) ) : 'https://www.bing.com'; … … 620 625 ); 621 626 } 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 } 622 710 } -
ai-content-writer/trunk/includes/Admin/Settings.php
r3295814 r3357556 39 39 </select> 40 40 <abbr class="aicw-pro-badge required" title="<?php esc_attr_e( 'This feature is available in the Pro version', 'ai-content-writer' ); ?>"> — <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> 42 42 </div> 43 43 </div> -
ai-content-writer/trunk/includes/Admin/views/add-campaign.php
r3326474 r3357556 228 228 </p> 229 229 </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> 230 239 </div> 231 240 <div class="aicw-sidebar__footer"> -
ai-content-writer/trunk/includes/Admin/views/edit-campaign.php
r3326474 r3357556 237 237 <th><?php esc_html_e( 'Progress', 'ai-content-writer' ); ?></th> 238 238 <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> 239 240 <th class="actions"><?php esc_html_e( 'Actions', 'ai-content-writer' ); ?></th> 240 241 </tr> … … 270 271 <td><?php echo esc_html( $post->post_status ); ?></td> 271 272 <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( '—' ); 283 endif; 284 ?> 285 </td> 286 <td> 272 287 <a href="#" class="aicw_delete_temp_post" data-post-id="<?php echo esc_attr( $post->ID ); ?>"> 273 288 <?php esc_html_e( 'Delete', 'ai-content-writer' ); ?> … … 280 295 ?> 281 296 <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> 283 298 </tr> 284 299 <?php … … 308 323 </p> 309 324 </div> 310 311 325 <div class="form-field"> 312 326 <label for="status"><strong><?php esc_html_e( 'Campaign Status', 'ai-content-writer' ); ?></strong></label> … … 322 336 </p> 323 337 </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"> 326 349 <input type="hidden" name="id" value="<?php echo esc_attr( $campaign->ID ); ?>"/> 327 350 <input type="hidden" name="action" value="aicw_edit_campaign"/> 328 351 <?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> 329 354 <?php submit_button( __( 'Save Changes', 'ai-content-writer' ), 'primary', 'edit_campaign' ); ?> 330 355 </div> -
ai-content-writer/trunk/includes/Admin/views/settings.php
r3326474 r3357556 71 71 <div class="field"> 72 72 <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> 73 78 <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>77 79 </select> 78 80 <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 70 70 // Generate host URL for Bing search with keywords. 71 71 $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"; 73 73 74 74 // Initialize HTML dom. … … 96 96 foreach ( $results as $a ) { 97 97 $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 } 99 106 100 107 if ( empty( $title ) || empty( $link ) ) { -
ai-content-writer/trunk/includes/Cron.php
r3295814 r3357556 21 21 public function __construct() { 22 22 add_action( 'init', array( $this, 'schedule_cron' ) ); 23 add_filter( 'cron_schedules', array( __CLASS__, 'add_cron_intervals' ) ); 23 24 24 25 // 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' ) ); 29 30 } 30 31 … … 61 62 62 63 /** 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 /** 63 85 * Generate titles. 86 * 87 * @param array $args The arguments. 64 88 * 65 89 * @since 1.4.0 66 90 * @return void 67 91 */ 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 ); 78 104 79 105 // Loop through each campaign. … … 107 133 break; 108 134 } else { 109 // Now request the OpenAIto generate the titles depending on the keywords.135 // Now request the AI Model to generate the titles depending on the keywords. 110 136 $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 ); 112 138 } 113 139 … … 119 145 } 120 146 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 ) ) { 123 149 continue; 124 150 } 125 151 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 ); 128 154 129 155 // Remove surrounding quotes if present. … … 175 201 * Generate content. 176 202 * 203 * @param array $args The arguments. 204 * 177 205 * @since 1.4.0 178 206 * @return void 179 207 */ 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 181 219 // 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 ); 191 221 192 222 // Loop through each post. … … 198 228 $campaign_id = get_post_meta( $post_id, '_aicw_campaign_id', true ); 199 229 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 200 236 // Check if the post needs generating content. 201 237 $needs_update = aicw_temp_post_needs_update( $post, $campaign_id ); … … 222 258 } 223 259 224 $is_updated = false;225 260 // Check if the campaign type is articles or rss-feed. 226 261 if ( 'articles' === $campaign_type ) { … … 269 304 * Generate thumbnails. 270 305 * 306 * @param array $args The arguments. 307 * 271 308 * @since 1.4.0 272 309 * @return void 273 310 */ 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 275 322 // 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 ); 285 324 286 325 // Loop through each post. … … 291 330 // Get the associated campaign ID. 292 331 $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 } 293 338 294 339 // Check if the post needs generating thumbnail. … … 353 398 * This will publish the generated posts that are in pending status and completed all the steps. 354 399 * 400 * @param array $args The arguments. 401 * 355 402 * @since 1.4.0 356 403 * @return void 357 404 */ 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 359 416 // 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 ); 369 418 370 419 // Loop through each post. -
ai-content-writer/trunk/includes/Plugin.php
r3306156 r3357556 326 326 $max_tokens = isset( $prompt_data['max_tokens'] ) ? $prompt_data['max_tokens'] : 1000; 327 327 $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 } 329 343 330 344 // Define the API URL. … … 351 365 ); 352 366 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 353 375 // Set up the arguments for the request. 354 376 $args = array( -
ai-content-writer/trunk/includes/functions.php
r3295814 r3357556 139 139 * @param string $type The type of the campaign. 140 140 * @param string $keywords The campaign keywords. 141 * @param int $needed_count The number of titles to generate. 141 142 * 142 143 * @since 1.4.0 143 144 * @return array The generated titles. 144 145 */ 145 function aicw_generate_titles( $type, $keywords ) {146 function aicw_generate_titles( $type, $keywords, $needed_count = 20 ) { 146 147 if ( empty( $type ) || empty( $keywords ) ) { 147 148 return array(); 148 149 } 150 151 // Initialize titles needed count. 152 $needed_count = empty( $needed_count ) ? 20 : ( absint( $needed_count ) + 20 ); 149 153 150 154 if ( 'gemini' === $type ) { … … 165 169 'parts' => array( 166 170 array( 167 'text' => 'You are experienced in writing about ' . $keywords . '. Please generate more than 20SEO friendly titles for these keywords.',171 'text' => 'You are experienced in writing about ' . $keywords . '. Please generate ' . $needed_count . ' SEO friendly titles for these keywords.', 168 172 ), 169 173 ), … … 212 216 213 217 // 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'; 215 220 216 221 // The data payload to send to the OpenAI API. 217 222 $data = array( 218 'model' => 'gpt-3.5-turbo',223 'model' => $chatgpt_ai_model, 219 224 'messages' => array( 220 225 array( … … 224 229 array( 225 230 'role' => 'user', 226 'content' => 'Generate more than 20titles for these keywords: ' . $keywords,231 'content' => 'Generate ' . $needed_count . ' titles for these keywords: ' . $keywords, 227 232 ), 228 233 ), … … 233 238 'presence_penalty' => 0, 234 239 ); 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 } 235 245 236 246 // Set up the arguments for the request. … … 382 392 } 383 393 384 $max_tokens = 1000;394 $max_tokens = 5000; 385 395 $temperature = 0.7; 386 396 … … 412 422 'prompt' => $prompt, 413 423 'system_tone' => $system_tone, 414 'max_tokens' => empty( $max_tokens ) ? 1000 : absint( $max_tokens ),424 'max_tokens' => empty( $max_tokens ) ? 5000 : absint( $max_tokens ), 415 425 'temperature' => empty( $temperature ) ? 0.7 : floatval( $temperature ), 416 426 ); … … 674 684 <?php 675 685 } 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 */ 696 function 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 3 3 msgid "" 4 4 msgstr "" 5 "Project-Id-Version: AI Content Writer 2.0. 4\n"5 "Project-Id-Version: AI Content Writer 2.0.5\n" 6 6 "Report-Msgid-Bugs-To: https://beautifulplugins.com/support/\n" 7 "POT-Creation-Date: 2025-0 7-11 18:20:52+00:00\n"7 "POT-Creation-Date: 2025-09-07 23:34:34+00:00\n" 8 8 "MIME-Version: 1.0\n" 9 9 "Content-Type: text/plain; charset=utf-8\n" … … 25 25 "X-Generator: grunt-wp-i18n 1.0.3\n" 26 26 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 31 32 msgid "You do not have permission to perform this action." 32 33 msgstr "" 33 34 34 #: includes/Admin/Actions.php: 55 includes/Admin/Actions.php:16135 #: includes/Admin/Actions.php:60 includes/Admin/Actions.php:166 35 36 msgid "Title is required. Please enter the campaign title." 36 37 msgstr "" 37 38 38 #: includes/Admin/Actions.php:6 1 includes/Admin/Actions.php:16739 #: includes/Admin/Actions.php:66 includes/Admin/Actions.php:172 39 40 msgid "Campaign type is required. Please select the campaign type." 40 41 msgstr "" 41 42 42 #: includes/Admin/Actions.php: 67 includes/Admin/Actions.php:17343 #: includes/Admin/Actions.php:72 includes/Admin/Actions.php:178 43 44 msgid "Keywords are required. Please enter the keywords." 44 45 msgstr "" 45 46 46 #: includes/Admin/Actions.php:7 3 includes/Admin/Actions.php:17947 #: includes/Admin/Actions.php:78 includes/Admin/Actions.php:184 47 48 msgid "RSS feed link is required. Please enter the RSS feed link." 48 49 msgstr "" 49 50 50 #: includes/Admin/Actions.php:12 151 #: includes/Admin/Actions.php:126 51 52 msgid "Campaign added successfully." 52 53 msgstr "" 53 54 54 #: includes/Admin/Actions.php:1 5555 #: includes/Admin/Actions.php:160 includes/Admin/Actions.php:649 55 56 msgid "Invalid campaign. Please try again." 56 57 msgstr "" 57 58 58 #: includes/Admin/Actions.php:2 2759 #: includes/Admin/Actions.php:232 59 60 msgid "Campaign updated successfully." 60 61 msgstr "" 61 62 62 #: includes/Admin/Actions.php:2 7963 #: includes/Admin/Actions.php:284 63 64 msgid "Settings saved successfully." 64 65 msgstr "" 65 66 66 #: includes/Admin/Actions.php:30 3includes/Admin/views/generate-content.php:5967 #: includes/Admin/Actions.php:308 includes/Admin/views/generate-content.php:59 67 68 msgid "English" 68 69 msgstr "" 69 70 70 #: includes/Admin/Actions.php:31 0includes/Admin/views/generate-content.php:8171 #: includes/Plugin.php:325 includes/functions.php:3 8171 #: includes/Admin/Actions.php:315 includes/Admin/views/generate-content.php:81 72 #: includes/Plugin.php:325 includes/functions.php:391 72 73 msgid "" 73 74 "You are an expert SEO content writer. Generate factually accurate, " … … 76 77 msgstr "" 77 78 78 #: includes/Admin/Actions.php:3 1879 #: includes/Admin/Actions.php:323 79 80 msgid "Title is required. Please, start with \"Write an article on...\"" 80 81 msgstr "" 81 82 82 #: includes/Admin/Actions.php:32 483 #: includes/Admin/Actions.php:329 83 84 msgid "Prompt type is required. Please, select the prompt type." 84 85 msgstr "" 85 86 86 #: includes/Admin/Actions.php:33 087 #: includes/Admin/Actions.php:335 87 88 msgid "Language is required. Please, select the language." 88 89 msgstr "" 89 90 90 #: includes/Admin/Actions.php:3 3691 #: includes/Admin/Actions.php:341 91 92 msgid "Post type is required. Please, select the post type." 92 93 msgstr "" 93 94 94 #: includes/Admin/Actions.php:3 47includes/Plugin.php:23795 #: includes/Admin/Actions.php:352 includes/Plugin.php:237 95 96 msgid "" 96 97 "Please configure the API settings. A valid Gemini API key is required to " … … 98 99 msgstr "" 99 100 100 #: includes/Admin/Actions.php:4 26101 #: includes/Admin/Actions.php:431 101 102 msgid "" 102 103 "Please configure the API settings. A valid ChatGPT API secret key is " … … 104 105 msgstr "" 105 106 106 #: includes/Admin/Actions.php:43 4107 #: includes/Admin/Actions.php:439 107 108 #. translators: 1: Prompt Content, 2: System Tone, 3: Language, 4: Min Words 108 109 msgid "" … … 126 127 msgstr "" 127 128 128 #: includes/Admin/Actions.php:4 49 includes/functions.php:405129 #: includes/Admin/Actions.php:454 includes/functions.php:415 129 130 msgid "The article should be optimized for SEO" 130 131 msgstr "" 131 132 132 #: includes/Admin/Actions.php:4 49 includes/functions.php:405133 #: includes/Admin/Actions.php:454 includes/functions.php:415 133 134 msgid "The article should be optimized for SEO, including relevant keywords: " 134 135 msgstr "" 135 136 136 #: includes/Admin/Actions.php:4 76137 #: includes/Admin/Actions.php:481 137 138 msgid "Invalid API model. Please configure the API settings." 138 139 msgstr "" 139 140 140 #: includes/Admin/Actions.php:51 4 includes/Admin/Actions.php:519141 #: includes/Admin/Actions.php:519 includes/Admin/Actions.php:524 141 142 msgid "Content generated successfully." 142 143 msgstr "" 143 144 144 #: includes/Admin/Actions.php:54 4 includes/Admin/Actions.php:602145 #: includes/Admin/Actions.php:549 includes/Admin/Actions.php:607 145 146 msgid "Invalid post. Please try again." 146 147 msgstr "" 147 148 148 #: includes/Admin/Actions.php:55 0149 #: includes/Admin/Actions.php:555 149 150 msgid "Invalid image. Please select an image." 150 151 msgstr "" 151 152 152 #: includes/Admin/Actions.php:56 0153 #: includes/Admin/Actions.php:565 153 154 msgid "Invalid image URL. Please try again." 154 155 msgstr "" 155 156 156 #: includes/Admin/Actions.php:57 4157 #: includes/Admin/Actions.php:579 157 158 msgid "Content generated and featured image set successfully." 158 159 msgstr "" 159 160 160 #: includes/Admin/Actions.php:61 1161 #: includes/Admin/Actions.php:616 161 162 msgid "Post deleted successfully." 162 163 msgstr "" 163 164 164 #: includes/Admin/Actions.php:6 18165 #: includes/Admin/Actions.php:623 165 166 msgid "Failed to delete the post. Please try again." 167 msgstr "" 168 169 #: includes/Admin/Actions.php:658 170 msgid "Campaign not found. Please try again." 171 msgstr "" 172 173 #: includes/Admin/Actions.php:706 174 msgid "Campaign run successfully." 166 175 msgstr "" 167 176 … … 245 254 #: includes/Admin/ListTables/CampaignsListTable.php:170 246 255 #: includes/Admin/ListTables/CampaignsListTable.php:183 247 #: includes/Admin/views/edit-campaign.php:2 73 includes/functions.php:671256 #: includes/Admin/views/edit-campaign.php:288 includes/functions.php:681 248 257 msgid "Delete" 249 258 msgstr "" … … 251 260 #: includes/Admin/ListTables/CampaignsListTable.php:215 252 261 #: includes/Admin/views/add-campaign.php:221 253 #: includes/Admin/views/edit-campaign.php:3 15262 #: includes/Admin/views/edit-campaign.php:329 254 263 msgid "Active" 255 264 msgstr "" … … 268 277 #: includes/Admin/views/edit-campaign.php:125 269 278 #: includes/Admin/views/edit-campaign.php:169 270 #: includes/Admin/views/edit-campaign.php:3 07279 #: includes/Admin/views/edit-campaign.php:322 271 280 msgid "This feature is available in the Pro version" 272 281 msgstr "" … … 278 287 #: includes/Admin/views/edit-campaign.php:125 279 288 #: includes/Admin/views/edit-campaign.php:169 280 #: includes/Admin/views/edit-campaign.php:3 07includes/Plugin.php:131289 #: includes/Admin/views/edit-campaign.php:322 includes/Plugin.php:131 281 290 msgid "Go Pro" 282 291 msgstr "" … … 284 293 #: includes/Admin/Settings.php:41 285 294 msgid "" 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." 289 299 msgstr "" 290 300 291 301 #: includes/Admin/views/add-campaign.php:19 292 #: includes/Admin/views/add-campaign.php:2 34302 #: includes/Admin/views/add-campaign.php:243 293 303 msgid "Add Campaign" 294 304 msgstr "" … … 335 345 #: includes/Admin/views/add-campaign.php:55 336 346 #: includes/Admin/views/edit-campaign.php:58 337 #: includes/Admin/views/settings.php:10 4347 #: includes/Admin/views/settings.php:106 338 348 msgid "Gemini" 339 349 msgstr "" … … 341 351 #: includes/Admin/views/add-campaign.php:56 342 352 #: includes/Admin/views/edit-campaign.php:59 343 #: includes/Admin/views/settings.php:10 5353 #: includes/Admin/views/settings.php:107 344 354 msgid "ChatGPT" 345 355 msgstr "" … … 534 544 535 545 #: includes/Admin/views/add-campaign.php:202 536 #: includes/Admin/views/edit-campaign.php: 295546 #: includes/Admin/views/edit-campaign.php:310 537 547 msgid "Campaign Actions" 538 548 msgstr "" 539 549 540 550 #: includes/Admin/views/add-campaign.php:206 541 #: includes/Admin/views/edit-campaign.php: 299551 #: includes/Admin/views/edit-campaign.php:314 542 552 msgid "Campaign Target" 543 553 msgstr "" 544 554 545 555 #: includes/Admin/views/add-campaign.php:212 546 #: includes/Admin/views/edit-campaign.php:3 05556 #: includes/Admin/views/edit-campaign.php:320 547 557 msgid "Target number of posts to generate." 548 558 msgstr "" 549 559 550 560 #: includes/Admin/views/add-campaign.php:213 551 #: includes/Admin/views/edit-campaign.php:3 06561 #: includes/Admin/views/edit-campaign.php:321 552 562 msgid "Upgrading to Pro version will increase the limit." 553 563 msgstr "" 554 564 555 565 #: includes/Admin/views/add-campaign.php:218 556 #: includes/Admin/views/edit-campaign.php:3 12566 #: includes/Admin/views/edit-campaign.php:326 557 567 msgid "Campaign Status" 558 568 msgstr "" 559 569 560 570 #: includes/Admin/views/add-campaign.php:222 561 #: includes/Admin/views/add-campaign.php:2 79562 #: includes/Admin/views/edit-campaign.php:3 16563 #: includes/Admin/views/edit-campaign.php:3 74571 #: includes/Admin/views/add-campaign.php:288 572 #: includes/Admin/views/edit-campaign.php:330 573 #: includes/Admin/views/edit-campaign.php:399 564 574 #: includes/Admin/views/generate-content.php:151 565 575 msgid "Draft" … … 567 577 568 578 #: includes/Admin/views/add-campaign.php:223 569 #: includes/Admin/views/add-campaign.php:28 0570 #: includes/Admin/views/edit-campaign.php:3 17571 #: includes/Admin/views/edit-campaign.php: 375579 #: includes/Admin/views/add-campaign.php:289 580 #: includes/Admin/views/edit-campaign.php:331 581 #: includes/Admin/views/edit-campaign.php:400 572 582 #: includes/Admin/views/generate-content.php:152 573 583 msgid "Pending" … … 575 585 576 586 #: includes/Admin/views/add-campaign.php:227 577 #: includes/Admin/views/edit-campaign.php:3 21587 #: includes/Admin/views/edit-campaign.php:335 578 588 #: includes/Admin/views/generate-content.php:156 579 589 msgid "Select the status of the campaign." 580 590 msgstr "" 581 591 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 594 msgid "Campaign Frequency: " 595 msgstr "" 596 597 #: includes/Admin/views/add-campaign.php:235 598 #: includes/Admin/views/edit-campaign.php:343 599 msgid "Change" 600 msgstr "" 601 602 #: includes/Admin/views/add-campaign.php:250 603 #: includes/Admin/views/edit-campaign.php:361 584 604 msgid "Publish Content as" 585 605 msgstr "" 586 606 587 #: includes/Admin/views/add-campaign.php:2 42588 #: includes/Admin/views/edit-campaign.php:3 37607 #: includes/Admin/views/add-campaign.php:251 608 #: includes/Admin/views/edit-campaign.php:362 589 609 #: includes/Admin/views/generate-content.php:110 590 610 msgid "Type" 591 611 msgstr "" 592 612 593 #: includes/Admin/views/add-campaign.php:2 48594 #: includes/Admin/views/edit-campaign.php:3 43613 #: includes/Admin/views/add-campaign.php:257 614 #: includes/Admin/views/edit-campaign.php:368 595 615 #: includes/Admin/views/generate-content.php:116 596 616 msgid "Post Type" 597 617 msgstr "" 598 618 599 #: includes/Admin/views/add-campaign.php:2 68600 #: includes/Admin/views/edit-campaign.php:3 63619 #: includes/Admin/views/add-campaign.php:277 620 #: includes/Admin/views/edit-campaign.php:388 601 621 #: includes/Admin/views/generate-content.php:136 602 622 msgid "Select the post type to publish the content." 603 623 msgstr "" 604 624 605 #: includes/Admin/views/add-campaign.php:2 73606 #: includes/Admin/views/edit-campaign.php:3 68625 #: includes/Admin/views/add-campaign.php:282 626 #: includes/Admin/views/edit-campaign.php:393 607 627 msgid "Completed Post Status" 608 628 msgstr "" 609 629 610 #: includes/Admin/views/add-campaign.php:2 78611 #: includes/Admin/views/edit-campaign.php:3 73630 #: includes/Admin/views/add-campaign.php:287 631 #: includes/Admin/views/edit-campaign.php:398 612 632 #: includes/Admin/views/generate-content.php:150 613 633 msgid "Publish" 614 634 msgstr "" 615 635 616 #: includes/Admin/views/add-campaign.php:2 84617 #: includes/Admin/views/edit-campaign.php: 379636 #: includes/Admin/views/add-campaign.php:293 637 #: includes/Admin/views/edit-campaign.php:404 618 638 msgid "" 619 639 "Select the status of the generated posts. This will be used while " … … 621 641 msgstr "" 622 642 623 #: includes/Admin/views/add-campaign.php: 292624 #: includes/Admin/views/edit-campaign.php: 387643 #: includes/Admin/views/add-campaign.php:301 644 #: includes/Admin/views/edit-campaign.php:412 625 645 msgid "Campaign Settings" 626 646 msgstr "" 627 647 628 #: includes/Admin/views/add-campaign.php: 298629 #: includes/Admin/views/edit-campaign.php: 393648 #: includes/Admin/views/add-campaign.php:307 649 #: includes/Admin/views/edit-campaign.php:418 630 650 msgid "Generate Thumbnail" 631 651 msgstr "" 632 652 633 #: includes/Admin/views/add-campaign.php:3 01634 #: includes/Admin/views/edit-campaign.php: 396653 #: includes/Admin/views/add-campaign.php:310 654 #: includes/Admin/views/edit-campaign.php:421 635 655 msgid "Enable to generate a thumbnail for the each campaigns generated content." 636 656 msgstr "" … … 697 717 698 718 #: includes/Admin/views/edit-campaign.php:213 699 #: includes/Admin/views/edit-campaign.php:4 05719 #: includes/Admin/views/edit-campaign.php:430 700 720 msgid "Campaign Posts" 701 721 msgstr "" … … 716 736 717 737 #: includes/Admin/views/edit-campaign.php:239 738 msgid "Source" 739 msgstr "" 740 741 #: includes/Admin/views/edit-campaign.php:240 718 742 #: includes/Admin/views/generate-content.php:143 719 743 msgid "Actions" 720 744 msgstr "" 721 745 722 #: includes/Admin/views/edit-campaign.php:282 746 #: includes/Admin/views/edit-campaign.php:278 747 msgid "View Source" 748 msgstr "" 749 750 #: includes/Admin/views/edit-campaign.php:297 723 751 msgid "" 724 752 "No generated posts found for this campaign. Please wait while the posts are " … … 727 755 msgstr "" 728 756 729 #: includes/Admin/views/edit-campaign.php:329 730 #: includes/Admin/views/settings.php:147 757 #: includes/Admin/views/edit-campaign.php:352 758 msgid "Run Campaign" 759 msgstr "" 760 761 #: includes/Admin/views/edit-campaign.php:354 762 #: includes/Admin/views/settings.php:149 731 763 msgid "Save Changes" 732 764 msgstr "" 733 765 734 #: includes/Admin/views/edit-campaign.php:4 06766 #: includes/Admin/views/edit-campaign.php:431 735 767 msgid "Completed" 736 768 msgstr "" 737 769 738 #: includes/Admin/views/edit-campaign.php:4 49770 #: includes/Admin/views/edit-campaign.php:474 739 771 msgid "No completed posts found for this campaign." 740 772 msgstr "" … … 1078 1110 msgstr "" 1079 1111 1080 #: includes/Admin/views/help.php:117 includes/Admin/views/settings.php:15 61112 #: includes/Admin/views/help.php:117 includes/Admin/views/settings.php:158 1081 1113 msgid "Support" 1082 1114 msgstr "" 1083 1115 1084 #: includes/Admin/views/help.php:120 includes/Admin/views/settings.php:1 591116 #: includes/Admin/views/help.php:120 includes/Admin/views/settings.php:161 1085 1117 msgid "If you need help, please contact us." 1086 1118 msgstr "" 1087 1119 1088 #: includes/Admin/views/help.php:123 includes/Admin/views/settings.php:16 21120 #: includes/Admin/views/help.php:123 includes/Admin/views/settings.php:164 1089 1121 msgid "Contact Support" 1090 1122 msgstr "" 1091 1123 1092 #: includes/Admin/views/help.php:130 includes/Admin/views/settings.php:1 691124 #: includes/Admin/views/help.php:130 includes/Admin/views/settings.php:171 1093 1125 msgid "Our Popular Plugins" 1094 1126 msgstr "" 1095 1127 1096 #: includes/Admin/views/help.php:136 includes/Admin/views/settings.php:17 51128 #: includes/Admin/views/help.php:136 includes/Admin/views/settings.php:177 1097 1129 msgid "Send Emails – Newsletters, Automation & Email Marketing for WordPress" 1098 1130 msgstr "" 1099 1131 1100 #: includes/Admin/views/help.php:141 includes/Admin/views/settings.php:18 01132 #: includes/Admin/views/help.php:141 includes/Admin/views/settings.php:182 1101 1133 msgid "Essential Elements for WordPress" 1102 1134 msgstr "" 1103 1135 1104 #: includes/Admin/views/help.php:146 includes/Admin/views/settings.php:18 51136 #: includes/Admin/views/help.php:146 includes/Admin/views/settings.php:187 1105 1137 msgid "Shortcodes – Advanced Shortcode Manager" 1106 1138 msgstr "" 1107 1139 1108 #: includes/Admin/views/help.php:151 includes/Admin/views/settings.php:19 01140 #: includes/Admin/views/help.php:151 includes/Admin/views/settings.php:192 1109 1141 msgid "Post Showcase" 1110 1142 msgstr "" 1111 1143 1112 #: includes/Admin/views/help.php:156 includes/Admin/views/settings.php:19 51144 #: includes/Admin/views/help.php:156 includes/Admin/views/settings.php:197 1113 1145 msgid "SMS Manager – WooCommerce SMS Notifications" 1114 1146 msgstr "" 1115 1147 1116 #: includes/Admin/views/help.php:161 includes/Admin/views/settings.php:20 01148 #: includes/Admin/views/help.php:161 includes/Admin/views/settings.php:202 1117 1149 msgid "Invoice Payment" 1118 1150 msgstr "" … … 1187 1219 1188 1220 #: includes/Admin/views/settings.php:73 1221 msgid "GPT-5 (Latest, Multimodal)" 1222 msgstr "" 1223 1224 #: includes/Admin/views/settings.php:74 1225 msgid "GPT-5 Mini (Faster, Cheaper)" 1226 msgstr "" 1227 1228 #: includes/Admin/views/settings.php:75 1229 msgid "GPT-5 Nano (Lightweight)" 1230 msgstr "" 1231 1232 #: includes/Admin/views/settings.php:76 1233 msgid "GPT-4.1 (Advanced, Long Context)" 1234 msgstr "" 1235 1236 #: includes/Admin/views/settings.php:77 1237 msgid "GPT-4 Turbo" 1238 msgstr "" 1239 1240 #: includes/Admin/views/settings.php:78 1189 1241 msgid "GPT-3.5 Turbo" 1190 1242 msgstr "" 1191 1243 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 1205 1245 msgid "Select the ChatGPT AI model to generate content." 1206 1246 msgstr "" 1207 1247 1208 #: includes/Admin/views/settings.php:8 21248 #: includes/Admin/views/settings.php:84 1209 1249 msgid "Image Settings" 1210 1250 msgstr "" 1211 1251 1212 #: includes/Admin/views/settings.php:8 31252 #: includes/Admin/views/settings.php:85 1213 1253 msgid "" 1214 1254 "The following options are the image settings for the AI Content Writer " … … 1216 1256 msgstr "" 1217 1257 1218 #: includes/Admin/views/settings.php:8 71258 #: includes/Admin/views/settings.php:89 1219 1259 msgid "Pexels API Key:" 1220 1260 msgstr "" 1221 1261 1222 #: includes/Admin/views/settings.php:9 11262 #: includes/Admin/views/settings.php:93 1223 1263 msgid "" 1224 1264 "Enter your Pexels API key. This key is required to generate thumbnails " … … 1226 1266 msgstr "" 1227 1267 1228 #: includes/Admin/views/settings.php:9 51268 #: includes/Admin/views/settings.php:97 1229 1269 msgid "Miscellaneous Settings" 1230 1270 msgstr "" 1231 1271 1232 #: includes/Admin/views/settings.php:9 61272 #: includes/Admin/views/settings.php:98 1233 1273 msgid "" 1234 1274 "The following options are the miscellaneous settings for the AI Content " … … 1236 1276 msgstr "" 1237 1277 1238 #: includes/Admin/views/settings.php:10 01278 #: includes/Admin/views/settings.php:102 1239 1279 msgid "API Model:" 1240 1280 msgstr "" 1241 1281 1242 #: includes/Admin/views/settings.php:10 71282 #: includes/Admin/views/settings.php:109 1243 1283 msgid "" 1244 1284 "Select the AI model to generate content using the instant content " … … 1246 1286 msgstr "" 1247 1287 1248 #: includes/Admin/views/settings.php:11 21288 #: includes/Admin/views/settings.php:114 1249 1289 msgid "Enable Image Generation:" 1250 1290 msgstr "" 1251 1291 1252 #: includes/Admin/views/settings.php:11 71292 #: includes/Admin/views/settings.php:119 1253 1293 msgid "Enable Thumbnail Image Generation" 1254 1294 msgstr "" 1255 1295 1256 #: includes/Admin/views/settings.php:1 191296 #: includes/Admin/views/settings.php:121 1257 1297 msgid "" 1258 1298 "Enable to activate the thumbnail image generation feature. AI generated " … … 1261 1301 msgstr "" 1262 1302 1263 #: includes/Admin/views/settings.php:12 41303 #: includes/Admin/views/settings.php:126 1264 1304 msgid "Enable Redirection:" 1265 1305 msgstr "" 1266 1306 1267 #: includes/Admin/views/settings.php:1 291307 #: includes/Admin/views/settings.php:131 1268 1308 msgid "Enable Redirection" 1269 1309 msgstr "" 1270 1310 1271 #: includes/Admin/views/settings.php:13 11311 #: includes/Admin/views/settings.php:133 1272 1312 msgid "" 1273 1313 "Enable to redirect to the edit page after successful generation of content " … … 1275 1315 msgstr "" 1276 1316 1277 #: includes/Plugin.php:296 includes/Plugin.php:380 1317 #: includes/Cron.php:74 1318 msgid "Every 15 Minutes" 1319 msgstr "" 1320 1321 #: includes/Cron.php:78 1322 msgid "Every 30 Minutes" 1323 msgstr "" 1324 1325 #: includes/Plugin.php:296 includes/Plugin.php:402 1278 1326 msgid "An unexpected error occurred while generating the content." 1279 1327 msgstr "" … … 1289 1337 msgstr "" 1290 1338 1291 #: includes/Plugin.php:4 011339 #: includes/Plugin.php:423 1292 1340 msgid "" 1293 1341 "Please configure the API settings. A valid Pexels API key is required to " … … 1295 1343 msgstr "" 1296 1344 1297 #: includes/Plugin.php:4 341345 #: includes/Plugin.php:456 1298 1346 msgid "An unexpected error occurred while generating the images." 1299 1347 msgstr "" … … 1355 1403 msgstr "" 1356 1404 1357 #: includes/functions.php: 3901405 #: includes/functions.php:400 1358 1406 #. translators: 1: Prompt Content, 2: System Tone, 3: Language 1359 1407 msgid "" … … 1376 1424 msgstr "" 1377 1425 1378 #: includes/functions.php:5 021426 #: includes/functions.php:512 1379 1427 msgid "The campaign is not found." 1380 1428 msgstr "" 1381 1429 1382 #: includes/functions.php:5 501430 #: includes/functions.php:560 1383 1431 msgid "The campaign target is reached." 1384 1432 msgstr "" 1385 1433 1386 #: includes/functions.php:6 651434 #: includes/functions.php:675 1387 1435 msgid "Keyword" 1388 1436 msgstr "" 1389 1437 1390 #: includes/functions.php:6 681438 #: includes/functions.php:678 1391 1439 msgid "Keyword 2" 1392 1440 msgstr "" -
ai-content-writer/trunk/readme.txt
r3326474 r3357556 3 3 Tags: content writer, ai, content, writing, autoblog 4 4 Tested up to: 6.8 5 Stable tag: 2.0. 45 Stable tag: 2.0.5 6 6 License: GPLv2 or later 7 7 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 186 186 187 187 == 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 188 195 = 2.0.4 (12th July 2025) = 189 196 * New: Update plugin UI for better user experience. … … 240 247 241 248 == Upgrade Notice == 242 = 2.0. 0=249 = 2.0.5 = 243 250 This 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 2 2 'root' => array( 3 3 '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', 7 7 'type' => 'wordpress-plugin', 8 8 'install_path' => __DIR__ . '/../../', … … 12 12 'versions' => array( 13 13 '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', 17 17 'type' => 'wordpress-plugin', 18 18 'install_path' => __DIR__ . '/../../',
Note: See TracChangeset
for help on using the changeset viewer.