Changeset 3295473
- Timestamp:
- 05/17/2025 11:15:04 PM (11 months ago)
- Location:
- sapientseo
- Files:
-
- 6 edited
- 1 copied
-
tags/1.0.25 (copied) (copied from sapientseo/trunk)
-
tags/1.0.25/inc/api/posts.php (modified) (14 diffs)
-
tags/1.0.25/readme.txt (modified) (1 diff)
-
tags/1.0.25/sapientseo.php (modified) (1 diff)
-
trunk/inc/api/posts.php (modified) (14 diffs)
-
trunk/readme.txt (modified) (1 diff)
-
trunk/sapientseo.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
sapientseo/tags/1.0.25/inc/api/posts.php
r3295018 r3295473 4 4 } 5 5 6 // 🔹 Shared Field Handler (ACF, categories, tags, SEO )6 // 🔹 Shared Field Handler (ACF, categories, tags, SEO, featured image) 7 7 function sapientseo_apply_fields($post_id, $params) { 8 8 // ACF fields … … 43 43 } 44 44 } 45 } 46 47 // Get SEO Fields 45 46 // Featured Image 47 if (!empty($params['featured_image']) && is_numeric($params['featured_image'])) { 48 set_post_thumbnail($post_id, intval($params['featured_image'])); 49 } 50 } 51 52 // 🔹 Collect SEO Fields 48 53 function sapientseo_collect_seo_fields($post_id) { 49 54 $seo = []; … … 71 76 } 72 77 73 // 🔹 Register R EST API Routes78 // 🔹 Register Routes 74 79 add_action('rest_api_init', function () { 75 80 register_rest_route('sapientseo/v1', '/create-post', [ 76 'methods' => 'POST',81 'methods' => 'POST', 77 82 'callback' => 'sapient_seo_create_post', 78 'permission_callback' => function ($request) { 79 return sapient_seo_api_key_permission($request); 80 } 83 'permission_callback' => fn($request) => sapient_seo_api_key_permission($request), 81 84 ]); 82 85 83 86 register_rest_route('sapientseo/v1', '/update-post', [ 84 'methods' => 'POST',87 'methods' => 'POST', 85 88 'callback' => 'sapient_seo_update_post', 86 'permission_callback' => function ($request) { 87 return sapient_seo_api_key_permission($request); 88 } 89 'permission_callback' => fn($request) => sapient_seo_api_key_permission($request), 89 90 ]); 90 91 91 92 register_rest_route('sapientseo/v1', '/posts/status', [ 92 'methods' => 'GET',93 'methods' => 'GET', 93 94 'callback' => 'sapient_seo_get_post_status', 94 'permission_callback' => function ($request) { 95 return sapient_seo_api_key_permission($request); 96 } 95 'permission_callback' => fn($request) => sapient_seo_api_key_permission($request), 97 96 ]); 98 97 99 98 register_rest_route('sapientseo/v1', '/posts', [ 100 'methods' => 'GET',99 'methods' => 'GET', 101 100 'callback' => 'sapient_seo_get_all_posts', 102 'permission_callback' => function ($request) { 103 return sapient_seo_api_key_permission($request); 104 } 101 'permission_callback' => fn($request) => sapient_seo_api_key_permission($request), 105 102 ]); 106 103 107 104 register_rest_route('sapientseo/v1', '/posts/(?P<id>\d+)', [ 108 'methods' => 'GET',105 'methods' => 'GET', 109 106 'callback' => 'sapient_seo_get_post_details', 110 'permission_callback' => function ($request) { 111 return sapient_seo_api_key_permission($request); 112 } 113 ]); 107 'permission_callback' => fn($request) => sapient_seo_api_key_permission($request), 108 ]); 109 114 110 register_rest_route('sapientseo/v1', '/publish-post', [ 115 'methods' => 'POST',111 'methods' => 'POST', 116 112 'callback' => 'sapient_seo_quick_publish_post', 117 'permission_callback' => function ($request) { 118 return sapient_seo_api_key_permission($request); 119 } 120 ]); 113 'permission_callback' => fn($request) => sapient_seo_api_key_permission($request), 114 ]); 115 121 116 register_rest_route('sapientseo/v1', '/delete-post', [ 122 'methods' => 'POST',117 'methods' => 'POST', 123 118 'callback' => 'sapient_seo_delete_post', 124 'permission_callback' => function ($request) { 125 return sapient_seo_api_key_permission($request); 126 } 119 'permission_callback' => fn($request) => sapient_seo_api_key_permission($request), 127 120 ]); 128 121 }); … … 158 151 'error' => 'post_creation_failed', 159 152 'message' => 'Could not create post.', 160 'status' => 500 153 'status' => 500, 161 154 ]); 162 155 } … … 194 187 } 195 188 196 if (isset($params['status']) && in_array($params['status'], ['draft', 'publish', 'pending', 'future', 'private', 'trash' ], true)) {189 if (isset($params['status']) && in_array($params['status'], ['draft', 'publish', 'pending', 'future', 'private', 'trash'], true)) { 197 190 $post_data['post_status'] = $params['status']; 198 191 } … … 203 196 'error' => 'post_update_failed', 204 197 'message' => 'Could not update post.', 205 'status' => 500 198 'status' => 500, 206 199 ]); 207 200 } … … 222 215 return rest_ensure_response([ 223 216 'post_id' => $post_id, 224 'status' => $status 225 ]); 226 } 227 228 // Get All Posts217 'status' => $status, 218 ]); 219 } 220 221 // 🔹 Get All Posts 229 222 function sapient_seo_get_all_posts(WP_REST_Request $request) { 230 223 header('Cache-Control: no-cache, must-revalidate, max-age=0'); … … 241 234 'orderby' => 'modified', 242 235 'order' => 'DESC', 243 'no_found_rows' => false, // needed to get found_posts236 'no_found_rows' => false, 244 237 'cache_results' => false, 245 238 'update_post_meta_cache' => false, … … 266 259 267 260 return rest_ensure_response([ 268 'count' => count($posts), // number of posts in this call269 'total' => $query->found_posts, // total number of matching posts261 'count' => count($posts), 262 'total' => $query->found_posts, 270 263 'offset' => $offset, 271 264 'posts' => $posts, … … 273 266 } 274 267 275 // Get Post Details268 // 🔹 Get Post Details (includes featured image) 276 269 function sapient_seo_get_post_details(WP_REST_Request $request) { 277 270 $post_id = intval($request->get_param('id')); … … 307 300 308 301 return rest_ensure_response([ 309 'id' => $post_id, 310 'title' => html_entity_decode(get_the_title($post)), 311 'content' => html_entity_decode(apply_filters('the_content', $post->post_content)), 312 'excerpt' => html_entity_decode(get_the_excerpt($post)), 313 'status' => $post->post_status, 314 'post_type' => $post->post_type, 315 'slug' => $post->post_name, 316 'url' => get_permalink($post_id), 317 'created_at' => get_the_date('c', $post), 318 'modified_at' => get_post_modified_time('c', true, $post), 319 'acf' => $acf, 320 'seo' => $seo, 321 'categories' => $categories, 322 'tags' => $tags, 323 ]); 324 } 325 326 // 🔹 Quick Publish Post 302 'id' => $post_id, 303 'title' => html_entity_decode(get_the_title($post)), 304 'content' => html_entity_decode(apply_filters('the_content', $post->post_content)), 305 'excerpt' => html_entity_decode(get_the_excerpt($post)), 306 'status' => $post->post_status, 307 'post_type' => $post->post_type, 308 'slug' => $post->post_name, 309 'url' => get_permalink($post_id), 310 'created_at' => get_the_date('c', $post), 311 'modified_at' => get_post_modified_time('c', true, $post), 312 'acf' => $acf, 313 'seo' => $seo, 314 'categories' => $categories, 315 'tags' => $tags, 316 'featured_image' => get_the_post_thumbnail_url($post_id, 'full') ?? '', 317 ]); 318 } 319 320 // 🔹 Quick Publish 327 321 function sapient_seo_quick_publish_post(WP_REST_Request $request) { 328 322 $post_id = intval($request->get_param('post_id')); … … 342 336 'error' => 'publish_failed', 343 337 'message' => 'Could not publish post.', 344 'status' => 500 338 'status' => 500, 345 339 ]); 346 340 } … … 357 351 } 358 352 359 $result = wp_delete_post($post_id, true); // `true` = force delete353 $result = wp_delete_post($post_id, true); 360 354 361 355 if (!$result) { … … 363 357 'error' => 'delete_failed', 364 358 'message' => 'Could not delete post.', 365 'status' => 500 359 'status' => 500, 366 360 ]); 367 361 } -
sapientseo/tags/1.0.25/readme.txt
r3295018 r3295473 4 4 Tested up to: 6.8 5 5 Requires PHP: 7.4 6 Stable tag: 1.0.2 46 Stable tag: 1.0.25 7 7 License: GPLv2 or later 8 8 License URI: https://www.gnu.org/licenses/gpl-2.0.html -
sapientseo/tags/1.0.25/sapientseo.php
r3295018 r3295473 3 3 * Plugin Name: SapientSEO 4 4 * Description: Connect your WordPress site to SapientSEO using secure custom REST API endpoints. 5 * Version: 1.0.2 45 * Version: 1.0.25 6 6 * Author: SapientSEO 7 7 * Plugin URI: https://sapientseo.ai -
sapientseo/trunk/inc/api/posts.php
r3295018 r3295473 4 4 } 5 5 6 // 🔹 Shared Field Handler (ACF, categories, tags, SEO )6 // 🔹 Shared Field Handler (ACF, categories, tags, SEO, featured image) 7 7 function sapientseo_apply_fields($post_id, $params) { 8 8 // ACF fields … … 43 43 } 44 44 } 45 } 46 47 // Get SEO Fields 45 46 // Featured Image 47 if (!empty($params['featured_image']) && is_numeric($params['featured_image'])) { 48 set_post_thumbnail($post_id, intval($params['featured_image'])); 49 } 50 } 51 52 // 🔹 Collect SEO Fields 48 53 function sapientseo_collect_seo_fields($post_id) { 49 54 $seo = []; … … 71 76 } 72 77 73 // 🔹 Register R EST API Routes78 // 🔹 Register Routes 74 79 add_action('rest_api_init', function () { 75 80 register_rest_route('sapientseo/v1', '/create-post', [ 76 'methods' => 'POST',81 'methods' => 'POST', 77 82 'callback' => 'sapient_seo_create_post', 78 'permission_callback' => function ($request) { 79 return sapient_seo_api_key_permission($request); 80 } 83 'permission_callback' => fn($request) => sapient_seo_api_key_permission($request), 81 84 ]); 82 85 83 86 register_rest_route('sapientseo/v1', '/update-post', [ 84 'methods' => 'POST',87 'methods' => 'POST', 85 88 'callback' => 'sapient_seo_update_post', 86 'permission_callback' => function ($request) { 87 return sapient_seo_api_key_permission($request); 88 } 89 'permission_callback' => fn($request) => sapient_seo_api_key_permission($request), 89 90 ]); 90 91 91 92 register_rest_route('sapientseo/v1', '/posts/status', [ 92 'methods' => 'GET',93 'methods' => 'GET', 93 94 'callback' => 'sapient_seo_get_post_status', 94 'permission_callback' => function ($request) { 95 return sapient_seo_api_key_permission($request); 96 } 95 'permission_callback' => fn($request) => sapient_seo_api_key_permission($request), 97 96 ]); 98 97 99 98 register_rest_route('sapientseo/v1', '/posts', [ 100 'methods' => 'GET',99 'methods' => 'GET', 101 100 'callback' => 'sapient_seo_get_all_posts', 102 'permission_callback' => function ($request) { 103 return sapient_seo_api_key_permission($request); 104 } 101 'permission_callback' => fn($request) => sapient_seo_api_key_permission($request), 105 102 ]); 106 103 107 104 register_rest_route('sapientseo/v1', '/posts/(?P<id>\d+)', [ 108 'methods' => 'GET',105 'methods' => 'GET', 109 106 'callback' => 'sapient_seo_get_post_details', 110 'permission_callback' => function ($request) { 111 return sapient_seo_api_key_permission($request); 112 } 113 ]); 107 'permission_callback' => fn($request) => sapient_seo_api_key_permission($request), 108 ]); 109 114 110 register_rest_route('sapientseo/v1', '/publish-post', [ 115 'methods' => 'POST',111 'methods' => 'POST', 116 112 'callback' => 'sapient_seo_quick_publish_post', 117 'permission_callback' => function ($request) { 118 return sapient_seo_api_key_permission($request); 119 } 120 ]); 113 'permission_callback' => fn($request) => sapient_seo_api_key_permission($request), 114 ]); 115 121 116 register_rest_route('sapientseo/v1', '/delete-post', [ 122 'methods' => 'POST',117 'methods' => 'POST', 123 118 'callback' => 'sapient_seo_delete_post', 124 'permission_callback' => function ($request) { 125 return sapient_seo_api_key_permission($request); 126 } 119 'permission_callback' => fn($request) => sapient_seo_api_key_permission($request), 127 120 ]); 128 121 }); … … 158 151 'error' => 'post_creation_failed', 159 152 'message' => 'Could not create post.', 160 'status' => 500 153 'status' => 500, 161 154 ]); 162 155 } … … 194 187 } 195 188 196 if (isset($params['status']) && in_array($params['status'], ['draft', 'publish', 'pending', 'future', 'private', 'trash' ], true)) {189 if (isset($params['status']) && in_array($params['status'], ['draft', 'publish', 'pending', 'future', 'private', 'trash'], true)) { 197 190 $post_data['post_status'] = $params['status']; 198 191 } … … 203 196 'error' => 'post_update_failed', 204 197 'message' => 'Could not update post.', 205 'status' => 500 198 'status' => 500, 206 199 ]); 207 200 } … … 222 215 return rest_ensure_response([ 223 216 'post_id' => $post_id, 224 'status' => $status 225 ]); 226 } 227 228 // Get All Posts217 'status' => $status, 218 ]); 219 } 220 221 // 🔹 Get All Posts 229 222 function sapient_seo_get_all_posts(WP_REST_Request $request) { 230 223 header('Cache-Control: no-cache, must-revalidate, max-age=0'); … … 241 234 'orderby' => 'modified', 242 235 'order' => 'DESC', 243 'no_found_rows' => false, // needed to get found_posts236 'no_found_rows' => false, 244 237 'cache_results' => false, 245 238 'update_post_meta_cache' => false, … … 266 259 267 260 return rest_ensure_response([ 268 'count' => count($posts), // number of posts in this call269 'total' => $query->found_posts, // total number of matching posts261 'count' => count($posts), 262 'total' => $query->found_posts, 270 263 'offset' => $offset, 271 264 'posts' => $posts, … … 273 266 } 274 267 275 // Get Post Details268 // 🔹 Get Post Details (includes featured image) 276 269 function sapient_seo_get_post_details(WP_REST_Request $request) { 277 270 $post_id = intval($request->get_param('id')); … … 307 300 308 301 return rest_ensure_response([ 309 'id' => $post_id, 310 'title' => html_entity_decode(get_the_title($post)), 311 'content' => html_entity_decode(apply_filters('the_content', $post->post_content)), 312 'excerpt' => html_entity_decode(get_the_excerpt($post)), 313 'status' => $post->post_status, 314 'post_type' => $post->post_type, 315 'slug' => $post->post_name, 316 'url' => get_permalink($post_id), 317 'created_at' => get_the_date('c', $post), 318 'modified_at' => get_post_modified_time('c', true, $post), 319 'acf' => $acf, 320 'seo' => $seo, 321 'categories' => $categories, 322 'tags' => $tags, 323 ]); 324 } 325 326 // 🔹 Quick Publish Post 302 'id' => $post_id, 303 'title' => html_entity_decode(get_the_title($post)), 304 'content' => html_entity_decode(apply_filters('the_content', $post->post_content)), 305 'excerpt' => html_entity_decode(get_the_excerpt($post)), 306 'status' => $post->post_status, 307 'post_type' => $post->post_type, 308 'slug' => $post->post_name, 309 'url' => get_permalink($post_id), 310 'created_at' => get_the_date('c', $post), 311 'modified_at' => get_post_modified_time('c', true, $post), 312 'acf' => $acf, 313 'seo' => $seo, 314 'categories' => $categories, 315 'tags' => $tags, 316 'featured_image' => get_the_post_thumbnail_url($post_id, 'full') ?? '', 317 ]); 318 } 319 320 // 🔹 Quick Publish 327 321 function sapient_seo_quick_publish_post(WP_REST_Request $request) { 328 322 $post_id = intval($request->get_param('post_id')); … … 342 336 'error' => 'publish_failed', 343 337 'message' => 'Could not publish post.', 344 'status' => 500 338 'status' => 500, 345 339 ]); 346 340 } … … 357 351 } 358 352 359 $result = wp_delete_post($post_id, true); // `true` = force delete353 $result = wp_delete_post($post_id, true); 360 354 361 355 if (!$result) { … … 363 357 'error' => 'delete_failed', 364 358 'message' => 'Could not delete post.', 365 'status' => 500 359 'status' => 500, 366 360 ]); 367 361 } -
sapientseo/trunk/readme.txt
r3295018 r3295473 4 4 Tested up to: 6.8 5 5 Requires PHP: 7.4 6 Stable tag: 1.0.2 46 Stable tag: 1.0.25 7 7 License: GPLv2 or later 8 8 License URI: https://www.gnu.org/licenses/gpl-2.0.html -
sapientseo/trunk/sapientseo.php
r3295018 r3295473 3 3 * Plugin Name: SapientSEO 4 4 * Description: Connect your WordPress site to SapientSEO using secure custom REST API endpoints. 5 * Version: 1.0.2 45 * Version: 1.0.25 6 6 * Author: SapientSEO 7 7 * Plugin URI: https://sapientseo.ai
Note: See TracChangeset
for help on using the changeset viewer.