@mytechtoday/augment-extensions 0.7.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (483) hide show
  1. package/AGENTS.md +265 -232
  2. package/README.md +956 -771
  3. package/augment-extensions/coding-standards/bash/README.md +196 -196
  4. package/augment-extensions/coding-standards/bash/module.json +163 -163
  5. package/augment-extensions/coding-standards/bash/rules/naming-conventions.md +336 -336
  6. package/augment-extensions/coding-standards/bash/rules/universal-standards.md +289 -289
  7. package/augment-extensions/coding-standards/css/README.md +40 -40
  8. package/augment-extensions/coding-standards/css/examples/css-examples.css +550 -550
  9. package/augment-extensions/coding-standards/css/module.json +44 -44
  10. package/augment-extensions/coding-standards/css/rules/css-modern-features.md +448 -448
  11. package/augment-extensions/coding-standards/css/rules/css-standards.md +492 -492
  12. package/augment-extensions/coding-standards/html/README.md +40 -40
  13. package/augment-extensions/coding-standards/html/examples/html-examples.html +267 -267
  14. package/augment-extensions/coding-standards/html/examples/responsive-layout.html +505 -505
  15. package/augment-extensions/coding-standards/html/module.json +44 -44
  16. package/augment-extensions/coding-standards/html/rules/html-standards.md +349 -349
  17. package/augment-extensions/coding-standards/html-css-js/README.md +194 -194
  18. package/augment-extensions/coding-standards/html-css-js/examples/async-examples.js +487 -487
  19. package/augment-extensions/coding-standards/html-css-js/examples/css-examples.css +550 -550
  20. package/augment-extensions/coding-standards/html-css-js/examples/dom-examples.js +667 -667
  21. package/augment-extensions/coding-standards/html-css-js/examples/html-examples.html +267 -267
  22. package/augment-extensions/coding-standards/html-css-js/examples/javascript-examples.js +612 -612
  23. package/augment-extensions/coding-standards/html-css-js/examples/responsive-layout.html +505 -505
  24. package/augment-extensions/coding-standards/html-css-js/module.json +48 -48
  25. package/augment-extensions/coding-standards/html-css-js/rules/async-patterns.md +515 -515
  26. package/augment-extensions/coding-standards/html-css-js/rules/css-modern-features.md +448 -448
  27. package/augment-extensions/coding-standards/html-css-js/rules/css-standards.md +492 -492
  28. package/augment-extensions/coding-standards/html-css-js/rules/dom-manipulation.md +439 -439
  29. package/augment-extensions/coding-standards/html-css-js/rules/html-standards.md +349 -349
  30. package/augment-extensions/coding-standards/html-css-js/rules/javascript-standards.md +486 -486
  31. package/augment-extensions/coding-standards/html-css-js/rules/performance.md +463 -463
  32. package/augment-extensions/coding-standards/html-css-js/rules/tooling.md +543 -543
  33. package/augment-extensions/coding-standards/js/README.md +46 -46
  34. package/augment-extensions/coding-standards/js/examples/async-examples.js +487 -487
  35. package/augment-extensions/coding-standards/js/examples/dom-examples.js +667 -667
  36. package/augment-extensions/coding-standards/js/examples/javascript-examples.js +612 -612
  37. package/augment-extensions/coding-standards/js/module.json +49 -49
  38. package/augment-extensions/coding-standards/js/rules/async-patterns.md +515 -515
  39. package/augment-extensions/coding-standards/js/rules/dom-manipulation.md +439 -439
  40. package/augment-extensions/coding-standards/js/rules/javascript-standards.md +486 -486
  41. package/augment-extensions/coding-standards/js/rules/performance.md +463 -463
  42. package/augment-extensions/coding-standards/js/rules/tooling.md +543 -543
  43. package/augment-extensions/coding-standards/php/README.md +248 -248
  44. package/augment-extensions/coding-standards/php/examples/api-endpoint-example.php +204 -204
  45. package/augment-extensions/coding-standards/php/examples/cli-command-example.php +206 -206
  46. package/augment-extensions/coding-standards/php/examples/legacy-refactoring-example.php +234 -234
  47. package/augment-extensions/coding-standards/php/examples/web-application-example.php +211 -211
  48. package/augment-extensions/coding-standards/php/examples/woocommerce-extension-example.php +215 -215
  49. package/augment-extensions/coding-standards/php/examples/wordpress-plugin-example.php +189 -189
  50. package/augment-extensions/coding-standards/php/module.json +166 -166
  51. package/augment-extensions/coding-standards/php/rules/api-development.md +480 -480
  52. package/augment-extensions/coding-standards/php/rules/category-configuration.md +332 -332
  53. package/augment-extensions/coding-standards/php/rules/cli-tools.md +472 -472
  54. package/augment-extensions/coding-standards/php/rules/cms-integration.md +561 -561
  55. package/augment-extensions/coding-standards/php/rules/code-quality.md +402 -402
  56. package/augment-extensions/coding-standards/php/rules/documentation.md +425 -425
  57. package/augment-extensions/coding-standards/php/rules/ecommerce.md +627 -627
  58. package/augment-extensions/coding-standards/php/rules/error-handling.md +336 -336
  59. package/augment-extensions/coding-standards/php/rules/legacy-migration.md +677 -677
  60. package/augment-extensions/coding-standards/php/rules/naming-conventions.md +279 -279
  61. package/augment-extensions/coding-standards/php/rules/performance.md +392 -392
  62. package/augment-extensions/coding-standards/php/rules/psr-standards.md +186 -186
  63. package/augment-extensions/coding-standards/php/rules/security.md +358 -358
  64. package/augment-extensions/coding-standards/php/rules/testing.md +403 -403
  65. package/augment-extensions/coding-standards/php/rules/type-declarations.md +331 -331
  66. package/augment-extensions/coding-standards/php/rules/web-applications.md +426 -426
  67. package/augment-extensions/coding-standards/powershell/README.md +154 -154
  68. package/augment-extensions/coding-standards/powershell/examples/admin-example.ps1 +272 -272
  69. package/augment-extensions/coding-standards/powershell/examples/automation-example.ps1 +173 -173
  70. package/augment-extensions/coding-standards/powershell/examples/cloud-example.ps1 +243 -243
  71. package/augment-extensions/coding-standards/powershell/examples/cross-platform-example.ps1 +297 -297
  72. package/augment-extensions/coding-standards/powershell/examples/dsc-example.ps1 +224 -224
  73. package/augment-extensions/coding-standards/powershell/examples/legacy-migration-example.ps1 +340 -340
  74. package/augment-extensions/coding-standards/powershell/examples/module-example.psm1 +255 -255
  75. package/augment-extensions/coding-standards/powershell/module.json +165 -165
  76. package/augment-extensions/coding-standards/powershell/rules/administrative-tools.md +439 -439
  77. package/augment-extensions/coding-standards/powershell/rules/automation-scripts.md +240 -240
  78. package/augment-extensions/coding-standards/powershell/rules/cloud-orchestration.md +384 -384
  79. package/augment-extensions/coding-standards/powershell/rules/configuration-schema.md +383 -383
  80. package/augment-extensions/coding-standards/powershell/rules/cross-platform-scripts.md +482 -482
  81. package/augment-extensions/coding-standards/powershell/rules/dsc-configurations.md +296 -296
  82. package/augment-extensions/coding-standards/powershell/rules/error-handling.md +314 -314
  83. package/augment-extensions/coding-standards/powershell/rules/legacy-migrations.md +466 -466
  84. package/augment-extensions/coding-standards/powershell/rules/modules-functions.md +244 -244
  85. package/augment-extensions/coding-standards/powershell/rules/naming-conventions.md +266 -266
  86. package/augment-extensions/coding-standards/powershell/rules/performance-optimization.md +209 -209
  87. package/augment-extensions/coding-standards/powershell/rules/security-practices.md +314 -314
  88. package/augment-extensions/coding-standards/powershell/rules/testing-guidelines.md +268 -268
  89. package/augment-extensions/coding-standards/powershell/rules/universal-standards.md +197 -197
  90. package/augment-extensions/coding-standards/python/README.md +48 -48
  91. package/augment-extensions/coding-standards/python/examples/best-practices.py +373 -373
  92. package/augment-extensions/coding-standards/python/module.json +30 -30
  93. package/augment-extensions/coding-standards/python/rules/async-patterns.md +884 -884
  94. package/augment-extensions/coding-standards/python/rules/best-practices.md +232 -232
  95. package/augment-extensions/coding-standards/python/rules/code-organization.md +220 -220
  96. package/augment-extensions/coding-standards/python/rules/documentation.md +831 -831
  97. package/augment-extensions/coding-standards/python/rules/error-handling.md +1008 -1008
  98. package/augment-extensions/coding-standards/python/rules/naming-conventions.md +172 -172
  99. package/augment-extensions/coding-standards/python/rules/testing.md +409 -409
  100. package/augment-extensions/coding-standards/python/rules/tooling.md +446 -446
  101. package/augment-extensions/coding-standards/python/rules/type-hints.md +253 -253
  102. package/augment-extensions/coding-standards/react/README.md +45 -45
  103. package/augment-extensions/coding-standards/react/module.json +27 -27
  104. package/augment-extensions/coding-standards/react/rules/component-patterns.md +214 -214
  105. package/augment-extensions/coding-standards/react/rules/hooks-best-practices.md +235 -235
  106. package/augment-extensions/coding-standards/react/rules/performance.md +300 -300
  107. package/augment-extensions/coding-standards/react/rules/state-management.md +265 -265
  108. package/augment-extensions/coding-standards/react/rules/typescript-react.md +271 -271
  109. package/augment-extensions/coding-standards/typescript/README.md +45 -45
  110. package/augment-extensions/coding-standards/typescript/module.json +27 -27
  111. package/augment-extensions/coding-standards/typescript/rules/naming-conventions.md +225 -225
  112. package/augment-extensions/collections/html-css-js/README.md +82 -82
  113. package/augment-extensions/collections/html-css-js/collection.json +41 -41
  114. package/augment-extensions/domain-rules/api-design/README.md +41 -41
  115. package/augment-extensions/domain-rules/api-design/module.json +27 -27
  116. package/augment-extensions/domain-rules/api-design/rules/authentication.md +263 -263
  117. package/augment-extensions/domain-rules/api-design/rules/documentation.md +395 -395
  118. package/augment-extensions/domain-rules/api-design/rules/error-handling.md +290 -290
  119. package/augment-extensions/domain-rules/api-design/rules/graphql-api.md +313 -313
  120. package/augment-extensions/domain-rules/api-design/rules/rest-api.md +214 -214
  121. package/augment-extensions/domain-rules/api-design/rules/versioning.md +268 -268
  122. package/augment-extensions/domain-rules/database/README.md +161 -161
  123. package/augment-extensions/domain-rules/database/examples/flat-database-example.md +793 -793
  124. package/augment-extensions/domain-rules/database/examples/hybrid-database-example.md +1132 -1132
  125. package/augment-extensions/domain-rules/database/examples/nosql-document-example.md +868 -868
  126. package/augment-extensions/domain-rules/database/examples/nosql-graph-example.md +805 -805
  127. package/augment-extensions/domain-rules/database/examples/relational-schema-example.md +621 -621
  128. package/augment-extensions/domain-rules/database/examples/vector-database-example.md +965 -965
  129. package/augment-extensions/domain-rules/database/module.json +28 -28
  130. package/augment-extensions/domain-rules/database/rules/flat-databases.md +624 -624
  131. package/augment-extensions/domain-rules/database/rules/nosql-databases.md +588 -588
  132. package/augment-extensions/domain-rules/database/rules/nosql-document-stores.md +856 -856
  133. package/augment-extensions/domain-rules/database/rules/nosql-graph-databases.md +778 -778
  134. package/augment-extensions/domain-rules/database/rules/nosql-key-value-stores.md +963 -963
  135. package/augment-extensions/domain-rules/database/rules/performance-optimization.md +1076 -1076
  136. package/augment-extensions/domain-rules/database/rules/relational-databases.md +697 -697
  137. package/augment-extensions/domain-rules/database/rules/relational-indexing.md +671 -671
  138. package/augment-extensions/domain-rules/database/rules/relational-query-optimization.md +607 -607
  139. package/augment-extensions/domain-rules/database/rules/relational-schema-design.md +907 -907
  140. package/augment-extensions/domain-rules/database/rules/relational-transactions.md +783 -783
  141. package/augment-extensions/domain-rules/database/rules/security-standards.md +980 -980
  142. package/augment-extensions/domain-rules/database/rules/universal-best-practices.md +485 -485
  143. package/augment-extensions/domain-rules/database/rules/vector-databases.md +521 -521
  144. package/augment-extensions/domain-rules/database/rules/vector-embeddings.md +858 -858
  145. package/augment-extensions/domain-rules/database/rules/vector-indexing.md +934 -934
  146. package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/README.md +23 -23
  147. package/augment-extensions/domain-rules/design/color/themes/catppuccin-latte/module.json +26 -26
  148. package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/README.md +23 -23
  149. package/augment-extensions/domain-rules/design/color/themes/catppuccin-mocha/module.json +26 -26
  150. package/augment-extensions/domain-rules/design/color/themes/dracula/README.md +23 -23
  151. package/augment-extensions/domain-rules/design/color/themes/dracula/module.json +26 -26
  152. package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/README.md +23 -23
  153. package/augment-extensions/domain-rules/design/color/themes/gruvbox-dark/module.json +26 -26
  154. package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/README.md +23 -23
  155. package/augment-extensions/domain-rules/design/color/themes/gruvbox-light/module.json +26 -26
  156. package/augment-extensions/domain-rules/design/color/themes/high-contrast/README.md +27 -27
  157. package/augment-extensions/domain-rules/design/color/themes/high-contrast/module.json +26 -26
  158. package/augment-extensions/domain-rules/design/color/themes/monokai/README.md +23 -23
  159. package/augment-extensions/domain-rules/design/color/themes/monokai/module.json +26 -26
  160. package/augment-extensions/domain-rules/design/color/themes/nord/README.md +23 -23
  161. package/augment-extensions/domain-rules/design/color/themes/nord/module.json +26 -26
  162. package/augment-extensions/domain-rules/design/color/themes/one-dark/README.md +23 -23
  163. package/augment-extensions/domain-rules/design/color/themes/one-dark/module.json +26 -26
  164. package/augment-extensions/domain-rules/design/color/themes/one-light/README.md +23 -23
  165. package/augment-extensions/domain-rules/design/color/themes/one-light/module.json +26 -26
  166. package/augment-extensions/domain-rules/design/color/themes/solarized-dark/README.md +23 -23
  167. package/augment-extensions/domain-rules/design/color/themes/solarized-dark/module.json +26 -26
  168. package/augment-extensions/domain-rules/design/color/themes/solarized-light/README.md +23 -23
  169. package/augment-extensions/domain-rules/design/color/themes/solarized-light/module.json +26 -26
  170. package/augment-extensions/domain-rules/design/color/themes/tokyo-night/README.md +23 -23
  171. package/augment-extensions/domain-rules/design/color/themes/tokyo-night/module.json +26 -26
  172. package/augment-extensions/domain-rules/mcp/README.md +150 -150
  173. package/augment-extensions/domain-rules/mcp/examples/compressed-example.md +522 -522
  174. package/augment-extensions/domain-rules/mcp/examples/graph-augmented-example.md +520 -520
  175. package/augment-extensions/domain-rules/mcp/examples/hybrid-example.md +570 -570
  176. package/augment-extensions/domain-rules/mcp/examples/state-based-example.md +427 -427
  177. package/augment-extensions/domain-rules/mcp/examples/token-based-example.md +435 -435
  178. package/augment-extensions/domain-rules/mcp/examples/vector-based-example.md +502 -502
  179. package/augment-extensions/domain-rules/mcp/module.json +49 -49
  180. package/augment-extensions/domain-rules/mcp/rules/compressed-mcp.md +595 -595
  181. package/augment-extensions/domain-rules/mcp/rules/configuration.md +345 -345
  182. package/augment-extensions/domain-rules/mcp/rules/graph-augmented-mcp.md +687 -687
  183. package/augment-extensions/domain-rules/mcp/rules/hybrid-mcp.md +636 -636
  184. package/augment-extensions/domain-rules/mcp/rules/state-based-mcp.md +484 -484
  185. package/augment-extensions/domain-rules/mcp/rules/testing-validation.md +360 -360
  186. package/augment-extensions/domain-rules/mcp/rules/token-based-mcp.md +393 -393
  187. package/augment-extensions/domain-rules/mcp/rules/universal-rules.md +194 -194
  188. package/augment-extensions/domain-rules/mcp/rules/vector-based-mcp.md +625 -625
  189. package/augment-extensions/domain-rules/security/README.md +41 -41
  190. package/augment-extensions/domain-rules/security/module.json +28 -28
  191. package/augment-extensions/domain-rules/security/rules/authentication-security.md +361 -361
  192. package/augment-extensions/domain-rules/security/rules/encryption.md +208 -208
  193. package/augment-extensions/domain-rules/security/rules/input-validation.md +294 -294
  194. package/augment-extensions/domain-rules/security/rules/owasp-top-10.md +339 -339
  195. package/augment-extensions/domain-rules/security/rules/secure-coding.md +293 -293
  196. package/augment-extensions/domain-rules/security/rules/web-security.md +268 -268
  197. package/augment-extensions/domain-rules/seo-sales-marketing/ANNOUNCEMENT.md +143 -0
  198. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/README.md +140 -136
  199. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/SCHEMA-VALIDATION-REPORT.md +216 -216
  200. package/augment-extensions/domain-rules/seo-sales-marketing/TEST-VALIDATION.md +129 -0
  201. package/augment-extensions/domain-rules/seo-sales-marketing/USAGE-GUIDES.md +254 -0
  202. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/brand-kit-example.yaml +292 -292
  203. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/campaign-brief-example.yaml +389 -389
  204. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/content-calendar-example.yaml +643 -643
  205. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/email-newsletter-example.md +376 -376
  206. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/landing-page-example.md +934 -934
  207. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/ppc-ad-copy-example.md +301 -301
  208. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/seo-blog-post-example.md +347 -347
  209. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/examples/social-media-campaign-example.md +606 -606
  210. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/module.json +50 -50
  211. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/affiliate-influencer-marketing.md +593 -593
  212. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/asset-management.md +418 -418
  213. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/brand-consistency.md +210 -210
  214. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/content-marketing.md +337 -337
  215. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/conversion-optimization.md +455 -455
  216. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/direct-sales.md +499 -499
  217. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/email-marketing.md +439 -439
  218. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/legal-compliance.md +227 -227
  219. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/ppc-advertising.md +569 -569
  220. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/seo-optimization.md +470 -470
  221. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/social-media-marketing.md +414 -414
  222. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/rules/universal-marketing.md +177 -177
  223. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/asset-inventory.schema.json +247 -247
  224. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/brand-kit.schema.json +326 -326
  225. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/campaign-brief.schema.json +342 -342
  226. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/color-palette.schema.json +223 -223
  227. package/augment-extensions/domain-rules/{marketing-standards/seo-sales-marketing → seo-sales-marketing}/schemas/content-template.schema.json +383 -383
  228. package/augment-extensions/domain-rules/wordpress/README.md +163 -163
  229. package/augment-extensions/domain-rules/wordpress/module.json +32 -32
  230. package/augment-extensions/domain-rules/wordpress/rules/coding-standards.md +617 -617
  231. package/augment-extensions/domain-rules/wordpress/rules/directory-structure.md +270 -270
  232. package/augment-extensions/domain-rules/wordpress/rules/file-patterns.md +423 -423
  233. package/augment-extensions/domain-rules/wordpress/rules/gutenberg-blocks.md +493 -493
  234. package/augment-extensions/domain-rules/wordpress/rules/performance.md +568 -568
  235. package/augment-extensions/domain-rules/wordpress/rules/plugin-development.md +510 -510
  236. package/augment-extensions/domain-rules/wordpress/rules/project-detection.md +251 -251
  237. package/augment-extensions/domain-rules/wordpress/rules/rest-api.md +501 -501
  238. package/augment-extensions/domain-rules/wordpress/rules/security.md +564 -564
  239. package/augment-extensions/domain-rules/wordpress/rules/theme-development.md +388 -388
  240. package/augment-extensions/domain-rules/wordpress/rules/woocommerce.md +441 -441
  241. package/augment-extensions/domain-rules/wordpress-plugin/README.md +139 -139
  242. package/augment-extensions/domain-rules/wordpress-plugin/examples/ajax-plugin.md +1599 -1599
  243. package/augment-extensions/domain-rules/wordpress-plugin/examples/custom-post-type-plugin.md +1727 -1727
  244. package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block-plugin.md +428 -428
  245. package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block.md +422 -422
  246. package/augment-extensions/domain-rules/wordpress-plugin/examples/mvc-plugin.md +1623 -1623
  247. package/augment-extensions/domain-rules/wordpress-plugin/examples/object-oriented-plugin.md +1343 -1343
  248. package/augment-extensions/domain-rules/wordpress-plugin/examples/rest-endpoint.md +734 -734
  249. package/augment-extensions/domain-rules/wordpress-plugin/examples/settings-page-plugin.md +1350 -1350
  250. package/augment-extensions/domain-rules/wordpress-plugin/examples/simple-procedural-plugin.md +503 -503
  251. package/augment-extensions/domain-rules/wordpress-plugin/examples/singleton-plugin.md +971 -971
  252. package/augment-extensions/domain-rules/wordpress-plugin/module.json +53 -53
  253. package/augment-extensions/domain-rules/wordpress-plugin/rules/activation-hooks.md +770 -770
  254. package/augment-extensions/domain-rules/wordpress-plugin/rules/admin-interface.md +874 -874
  255. package/augment-extensions/domain-rules/wordpress-plugin/rules/ajax-handlers.md +629 -629
  256. package/augment-extensions/domain-rules/wordpress-plugin/rules/asset-management.md +559 -559
  257. package/augment-extensions/domain-rules/wordpress-plugin/rules/context-providers.md +709 -709
  258. package/augment-extensions/domain-rules/wordpress-plugin/rules/cron-jobs.md +736 -736
  259. package/augment-extensions/domain-rules/wordpress-plugin/rules/database-management.md +1057 -1057
  260. package/augment-extensions/domain-rules/wordpress-plugin/rules/documentation-standards.md +463 -463
  261. package/augment-extensions/domain-rules/wordpress-plugin/rules/frontend-functionality.md +478 -478
  262. package/augment-extensions/domain-rules/wordpress-plugin/rules/gutenberg-blocks.md +818 -818
  263. package/augment-extensions/domain-rules/wordpress-plugin/rules/internationalization.md +416 -416
  264. package/augment-extensions/domain-rules/wordpress-plugin/rules/migration.md +667 -667
  265. package/augment-extensions/domain-rules/wordpress-plugin/rules/performance-optimization.md +878 -878
  266. package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-architecture.md +693 -693
  267. package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-structure.md +352 -352
  268. package/augment-extensions/domain-rules/wordpress-plugin/rules/rest-api.md +818 -818
  269. package/augment-extensions/domain-rules/wordpress-plugin/rules/scaffolding-workflow.md +624 -624
  270. package/augment-extensions/domain-rules/wordpress-plugin/rules/security-best-practices.md +866 -866
  271. package/augment-extensions/domain-rules/wordpress-plugin/rules/testing-patterns.md +1165 -1165
  272. package/augment-extensions/domain-rules/wordpress-plugin/rules/testing.md +414 -414
  273. package/augment-extensions/domain-rules/wordpress-plugin/rules/vscode-integration.md +751 -751
  274. package/augment-extensions/domain-rules/wordpress-plugin/rules/woocommerce-integration.md +949 -949
  275. package/augment-extensions/domain-rules/wordpress-plugin/rules/wordpress-org-submission.md +458 -458
  276. package/augment-extensions/examples/design-patterns/README.md +37 -37
  277. package/augment-extensions/examples/design-patterns/examples/behavioral-patterns.md +370 -370
  278. package/augment-extensions/examples/design-patterns/examples/creational-patterns.md +250 -250
  279. package/augment-extensions/examples/design-patterns/examples/structural-patterns.md +264 -264
  280. package/augment-extensions/examples/design-patterns/module.json +27 -27
  281. package/augment-extensions/examples/gutenberg-block-plugin/README.md +101 -101
  282. package/augment-extensions/examples/gutenberg-block-plugin/examples/testimonial-block.md +428 -428
  283. package/augment-extensions/examples/gutenberg-block-plugin/module.json +40 -40
  284. package/augment-extensions/examples/rest-api-plugin/README.md +98 -98
  285. package/augment-extensions/examples/rest-api-plugin/examples/task-manager-api.md +1299 -1299
  286. package/augment-extensions/examples/rest-api-plugin/module.json +40 -40
  287. package/augment-extensions/examples/woocommerce-extension/README.md +98 -98
  288. package/augment-extensions/examples/woocommerce-extension/examples/product-customizer.md +763 -763
  289. package/augment-extensions/examples/woocommerce-extension/module.json +40 -40
  290. package/augment-extensions/workflows/beads/README.md +135 -135
  291. package/augment-extensions/workflows/beads/examples/complete-workflow-example.md +278 -278
  292. package/augment-extensions/workflows/beads/module.json +55 -55
  293. package/augment-extensions/workflows/beads/rules/best-practices.md +398 -398
  294. package/augment-extensions/workflows/beads/rules/file-format.md +327 -327
  295. package/augment-extensions/workflows/beads/rules/manual-setup.md +315 -315
  296. package/augment-extensions/workflows/beads/rules/workflow.md +326 -326
  297. package/augment-extensions/workflows/beads-integration/IMPLEMENTATION-STATUS.md +145 -145
  298. package/augment-extensions/workflows/beads-integration/README.md +143 -143
  299. package/augment-extensions/workflows/beads-integration/config/defaults.json +32 -32
  300. package/augment-extensions/workflows/beads-integration/config/schema.json +140 -140
  301. package/augment-extensions/workflows/beads-integration/examples/basic-task-generation.md +293 -293
  302. package/augment-extensions/workflows/beads-integration/module.json +75 -75
  303. package/augment-extensions/workflows/beads-integration/rules/core-rules.md +219 -219
  304. package/augment-extensions/workflows/beads-integration/rules/effectiveness-standards.md +256 -256
  305. package/augment-extensions/workflows/beads-integration/rules/task-generation.md +607 -607
  306. package/augment-extensions/workflows/database/README.md +195 -195
  307. package/augment-extensions/workflows/database/ai-prompt-testing.md +295 -295
  308. package/augment-extensions/workflows/database/examples/migration-example.md +498 -498
  309. package/augment-extensions/workflows/database/examples/optimization-example.md +496 -496
  310. package/augment-extensions/workflows/database/examples/schema-design-example.md +444 -444
  311. package/augment-extensions/workflows/database/module.json +42 -42
  312. package/augment-extensions/workflows/database/rules/data-migration.md +249 -249
  313. package/augment-extensions/workflows/database/rules/documentation-standards.md +339 -339
  314. package/augment-extensions/workflows/database/rules/migration-workflow.md +352 -352
  315. package/augment-extensions/workflows/database/rules/optimization-workflow.md +435 -435
  316. package/augment-extensions/workflows/database/rules/schema-design-workflow.md +535 -535
  317. package/augment-extensions/workflows/database/rules/testing-patterns.md +305 -305
  318. package/augment-extensions/workflows/database/rules/workflow.md +458 -458
  319. package/augment-extensions/workflows/wordpress-plugin/README.md +232 -232
  320. package/augment-extensions/workflows/wordpress-plugin/ai-prompts.md +839 -839
  321. package/augment-extensions/workflows/wordpress-plugin/bead-decomposition-patterns.md +854 -854
  322. package/augment-extensions/workflows/wordpress-plugin/examples/complete-plugin-example.md +540 -540
  323. package/augment-extensions/workflows/wordpress-plugin/examples/custom-post-type-example.md +1083 -1083
  324. package/augment-extensions/workflows/wordpress-plugin/examples/feature-addition-workflow.md +669 -669
  325. package/augment-extensions/workflows/wordpress-plugin/examples/plugin-creation-workflow.md +597 -597
  326. package/augment-extensions/workflows/wordpress-plugin/examples/secure-form-handler-example.md +925 -925
  327. package/augment-extensions/workflows/wordpress-plugin/examples/security-audit-workflow.md +752 -752
  328. package/augment-extensions/workflows/wordpress-plugin/examples/wordpress-org-submission-workflow.md +773 -773
  329. package/augment-extensions/workflows/wordpress-plugin/module.json +49 -49
  330. package/augment-extensions/workflows/wordpress-plugin/rules/best-practices.md +942 -942
  331. package/augment-extensions/workflows/wordpress-plugin/rules/development-workflow.md +702 -702
  332. package/augment-extensions/workflows/wordpress-plugin/rules/submission-workflow.md +728 -728
  333. package/augment-extensions/workflows/wordpress-plugin/rules/testing-workflow.md +775 -775
  334. package/augment-extensions/writing-standards/screenplay/README.md +339 -300
  335. package/augment-extensions/writing-standards/screenplay/_templates/README.md +121 -121
  336. package/augment-extensions/writing-standards/screenplay/_templates/genre-template.md +153 -153
  337. package/augment-extensions/writing-standards/screenplay/_templates/style-template.md +243 -243
  338. package/augment-extensions/writing-standards/screenplay/_templates/theme-template.md +213 -213
  339. package/augment-extensions/writing-standards/screenplay/examples/aaa-hollywood-scene.fountain +164 -164
  340. package/augment-extensions/writing-standards/screenplay/examples/beat-sheet-example.yaml +95 -95
  341. package/augment-extensions/writing-standards/screenplay/examples/character-profile-example.yaml +116 -116
  342. package/augment-extensions/writing-standards/screenplay/examples/commercial-30sec.fountain +151 -151
  343. package/augment-extensions/writing-standards/screenplay/examples/independent-monologue.fountain +67 -67
  344. package/augment-extensions/writing-standards/screenplay/examples/news-segment.fountain +142 -142
  345. package/augment-extensions/writing-standards/screenplay/examples/plot-outline-example.yaml +184 -184
  346. package/augment-extensions/writing-standards/screenplay/examples/tv-episode-teaser.fountain +204 -204
  347. package/augment-extensions/writing-standards/screenplay/genres/README.md +181 -181
  348. package/augment-extensions/writing-standards/screenplay/genres/examples/.gitkeep +2 -2
  349. package/augment-extensions/writing-standards/screenplay/genres/module.json +70 -70
  350. package/augment-extensions/writing-standards/screenplay/genres/rules/.gitkeep +2 -2
  351. package/augment-extensions/writing-standards/screenplay/genres/rules/action.md +399 -399
  352. package/augment-extensions/writing-standards/screenplay/genres/rules/adventure.md +407 -407
  353. package/augment-extensions/writing-standards/screenplay/genres/rules/animation.md +293 -293
  354. package/augment-extensions/writing-standards/screenplay/genres/rules/biographical.md +293 -293
  355. package/augment-extensions/writing-standards/screenplay/genres/rules/comedy.md +401 -401
  356. package/augment-extensions/writing-standards/screenplay/genres/rules/documentary.md +293 -293
  357. package/augment-extensions/writing-standards/screenplay/genres/rules/drama.md +409 -409
  358. package/augment-extensions/writing-standards/screenplay/genres/rules/fantasy.md +293 -293
  359. package/augment-extensions/writing-standards/screenplay/genres/rules/historical.md +293 -293
  360. package/augment-extensions/writing-standards/screenplay/genres/rules/horror.md +268 -268
  361. package/augment-extensions/writing-standards/screenplay/genres/rules/musical.md +294 -294
  362. package/augment-extensions/writing-standards/screenplay/genres/rules/mystery.md +293 -293
  363. package/augment-extensions/writing-standards/screenplay/genres/rules/noir.md +294 -294
  364. package/augment-extensions/writing-standards/screenplay/genres/rules/romance.md +293 -293
  365. package/augment-extensions/writing-standards/screenplay/genres/rules/sci-fi.md +289 -289
  366. package/augment-extensions/writing-standards/screenplay/genres/rules/superhero.md +293 -293
  367. package/augment-extensions/writing-standards/screenplay/genres/rules/thriller.md +294 -294
  368. package/augment-extensions/writing-standards/screenplay/genres/rules/western.md +293 -293
  369. package/augment-extensions/writing-standards/screenplay/module.json +124 -124
  370. package/augment-extensions/writing-standards/screenplay/rules/aaa-hollywood-films.md +339 -339
  371. package/augment-extensions/writing-standards/screenplay/rules/ai-integration-testing.md +329 -329
  372. package/augment-extensions/writing-standards/screenplay/rules/character-development.md +169 -169
  373. package/augment-extensions/writing-standards/screenplay/rules/commercials.md +437 -437
  374. package/augment-extensions/writing-standards/screenplay/rules/dialogue-writing.md +263 -263
  375. package/augment-extensions/writing-standards/screenplay/rules/diversity-inclusion.md +261 -261
  376. package/augment-extensions/writing-standards/screenplay/rules/examples-guide.md +315 -315
  377. package/augment-extensions/writing-standards/screenplay/rules/file-organization.md +213 -0
  378. package/augment-extensions/writing-standards/screenplay/rules/formatting-validation.md +413 -413
  379. package/augment-extensions/writing-standards/screenplay/rules/fountain-format.md +372 -372
  380. package/augment-extensions/writing-standards/screenplay/rules/independent-films.md +374 -374
  381. package/augment-extensions/writing-standards/screenplay/rules/live-tv-productions.md +443 -443
  382. package/augment-extensions/writing-standards/screenplay/rules/narrative-structures.md +207 -207
  383. package/augment-extensions/writing-standards/screenplay/rules/news-broadcasts.md +444 -444
  384. package/augment-extensions/writing-standards/screenplay/rules/pacing-timing.md +331 -331
  385. package/augment-extensions/writing-standards/screenplay/rules/quality-review-checklist.md +334 -334
  386. package/augment-extensions/writing-standards/screenplay/rules/quick-reference.md +299 -299
  387. package/augment-extensions/writing-standards/screenplay/rules/screen-continuity.md +263 -263
  388. package/augment-extensions/writing-standards/screenplay/rules/streaming-content.md +412 -412
  389. package/augment-extensions/writing-standards/screenplay/rules/trope-management.md +370 -370
  390. package/augment-extensions/writing-standards/screenplay/rules/tv-series.md +374 -374
  391. package/augment-extensions/writing-standards/screenplay/rules/universal-formatting.md +339 -339
  392. package/augment-extensions/writing-standards/screenplay/rules/vscode-integration.md +277 -277
  393. package/augment-extensions/writing-standards/screenplay/rules/web-content.md +393 -393
  394. package/augment-extensions/writing-standards/screenplay/schemas/beat-sheet.json +332 -332
  395. package/augment-extensions/writing-standards/screenplay/schemas/character-profile.json +247 -247
  396. package/augment-extensions/writing-standards/screenplay/schemas/feature-selection.json +200 -200
  397. package/augment-extensions/writing-standards/screenplay/schemas/plot-outline.json +233 -233
  398. package/augment-extensions/writing-standards/screenplay/schemas/screenplay-config.json +245 -245
  399. package/augment-extensions/writing-standards/screenplay/schemas/trope-inventory.json +221 -221
  400. package/augment-extensions/writing-standards/screenplay/styles/README.md +159 -159
  401. package/augment-extensions/writing-standards/screenplay/styles/examples/.gitkeep +2 -2
  402. package/augment-extensions/writing-standards/screenplay/styles/examples/style-applications.md +1449 -1449
  403. package/augment-extensions/writing-standards/screenplay/styles/module.json +64 -64
  404. package/augment-extensions/writing-standards/screenplay/styles/rules/.gitkeep +2 -2
  405. package/augment-extensions/writing-standards/screenplay/styles/rules/dialogue-centric.md +520 -520
  406. package/augment-extensions/writing-standards/screenplay/styles/rules/ensemble.md +499 -499
  407. package/augment-extensions/writing-standards/screenplay/styles/rules/epic.md +497 -497
  408. package/augment-extensions/writing-standards/screenplay/styles/rules/experimental.md +492 -492
  409. package/augment-extensions/writing-standards/screenplay/styles/rules/flashback.md +509 -509
  410. package/augment-extensions/writing-standards/screenplay/styles/rules/linear.md +490 -490
  411. package/augment-extensions/writing-standards/screenplay/styles/rules/minimalist.md +499 -499
  412. package/augment-extensions/writing-standards/screenplay/styles/rules/non-linear.md +501 -501
  413. package/augment-extensions/writing-standards/screenplay/styles/rules/poetic.md +499 -499
  414. package/augment-extensions/writing-standards/screenplay/styles/rules/realistic.md +498 -498
  415. package/augment-extensions/writing-standards/screenplay/styles/rules/satirical.md +499 -499
  416. package/augment-extensions/writing-standards/screenplay/styles/rules/surreal.md +508 -508
  417. package/augment-extensions/writing-standards/screenplay/styles/rules/voice-over.md +500 -500
  418. package/augment-extensions/writing-standards/screenplay/themes/README.md +158 -158
  419. package/augment-extensions/writing-standards/screenplay/themes/examples/.gitkeep +2 -2
  420. package/augment-extensions/writing-standards/screenplay/themes/examples/common-mistakes-and-fixes.md +643 -643
  421. package/augment-extensions/writing-standards/screenplay/themes/examples/complete-scene-example.md +311 -311
  422. package/augment-extensions/writing-standards/screenplay/themes/examples/individual-theme-examples.md +562 -562
  423. package/augment-extensions/writing-standards/screenplay/themes/examples/multi-theme-weaving.md +538 -538
  424. package/augment-extensions/writing-standards/screenplay/themes/examples/theme-application-guide.md +432 -432
  425. package/augment-extensions/writing-standards/screenplay/themes/examples/theme-integration-across-acts.md +637 -637
  426. package/augment-extensions/writing-standards/screenplay/themes/module.json +66 -66
  427. package/augment-extensions/writing-standards/screenplay/themes/rules/.gitkeep +2 -2
  428. package/augment-extensions/writing-standards/screenplay/themes/rules/ambition.md +458 -458
  429. package/augment-extensions/writing-standards/screenplay/themes/rules/betrayal.md +490 -490
  430. package/augment-extensions/writing-standards/screenplay/themes/rules/environment.md +458 -458
  431. package/augment-extensions/writing-standards/screenplay/themes/rules/fate.md +459 -459
  432. package/augment-extensions/writing-standards/screenplay/themes/rules/friendship.md +491 -491
  433. package/augment-extensions/writing-standards/screenplay/themes/rules/growth.md +491 -491
  434. package/augment-extensions/writing-standards/screenplay/themes/rules/identity.md +490 -490
  435. package/augment-extensions/writing-standards/screenplay/themes/rules/isolation.md +464 -464
  436. package/augment-extensions/writing-standards/screenplay/themes/rules/justice.md +461 -461
  437. package/augment-extensions/writing-standards/screenplay/themes/rules/love.md +489 -489
  438. package/augment-extensions/writing-standards/screenplay/themes/rules/power.md +494 -494
  439. package/augment-extensions/writing-standards/screenplay/themes/rules/redemption.md +483 -483
  440. package/augment-extensions/writing-standards/screenplay/themes/rules/revenge.md +489 -489
  441. package/augment-extensions/writing-standards/screenplay/themes/rules/survival.md +496 -496
  442. package/augment-extensions/writing-standards/screenplay/themes/rules/technology.md +463 -463
  443. package/augment-extensions/writing-standards/screenplay/utils/__tests__/file-organization.test.ts +169 -0
  444. package/augment-extensions/writing-standards/screenplay/utils/file-organization.ts +165 -0
  445. package/cli/MODULES.md +302 -302
  446. package/cli/dist/cli.js +109 -22
  447. package/cli/dist/cli.js.map +1 -1
  448. package/cli/dist/commands/gui.d.ts.map +1 -1
  449. package/cli/dist/commands/gui.js +54 -6
  450. package/cli/dist/commands/gui.js.map +1 -1
  451. package/cli/dist/commands/init.d.ts.map +1 -1
  452. package/cli/dist/commands/init.js +76 -23
  453. package/cli/dist/commands/init.js.map +1 -1
  454. package/cli/dist/commands/self-remove.d.ts.map +1 -1
  455. package/cli/dist/commands/self-remove.js +48 -74
  456. package/cli/dist/commands/self-remove.js.map +1 -1
  457. package/cli/dist/commands/show.d.ts +11 -0
  458. package/cli/dist/commands/show.d.ts.map +1 -1
  459. package/cli/dist/commands/show.js +120 -0
  460. package/cli/dist/commands/show.js.map +1 -1
  461. package/cli/dist/commands/showCompleted.d.ts +21 -0
  462. package/cli/dist/commands/showCompleted.d.ts.map +1 -0
  463. package/cli/dist/commands/showCompleted.js +225 -0
  464. package/cli/dist/commands/showCompleted.js.map +1 -0
  465. package/cli/dist/commands/skill.js +88 -88
  466. package/cli/dist/commands/update.d.ts +2 -0
  467. package/cli/dist/commands/update.d.ts.map +1 -1
  468. package/cli/dist/commands/update.js +67 -1
  469. package/cli/dist/commands/update.js.map +1 -1
  470. package/cli/dist/utils/beadsCompletedChecker.d.ts +72 -0
  471. package/cli/dist/utils/beadsCompletedChecker.d.ts.map +1 -0
  472. package/cli/dist/utils/beadsCompletedChecker.js +198 -0
  473. package/cli/dist/utils/beadsCompletedChecker.js.map +1 -0
  474. package/cli/dist/utils/catalog-sync.js +13 -13
  475. package/cli/dist/utils/extractCommandHelp.d.ts +51 -0
  476. package/cli/dist/utils/extractCommandHelp.d.ts.map +1 -0
  477. package/cli/dist/utils/extractCommandHelp.js +250 -0
  478. package/cli/dist/utils/extractCommandHelp.js.map +1 -0
  479. package/cli/dist/utils/install-rules.js +55 -55
  480. package/cli/dist/utils/mcp-integration.js +44 -44
  481. package/cli/dist/utils/rule-install-hooks.js +8 -8
  482. package/modules.md +667 -630
  483. package/package.json +85 -85
@@ -1,736 +1,736 @@
1
- # Cron Jobs and Scheduled Tasks
2
-
3
- ## Overview
4
-
5
- This guide covers WordPress cron job implementation for scheduled tasks including wp_schedule_event, custom cron schedules, wp_next_scheduled, wp_unschedule_event, and wp_clear_scheduled_hook.
6
-
7
- ---
8
-
9
- ## Basic Cron Job Setup
10
-
11
- ### Scheduling a Recurring Event
12
-
13
- ```php
14
- <?php
15
- /**
16
- * Schedule cron job on plugin activation
17
- */
18
- function my_plugin_activate() {
19
- if ( ! wp_next_scheduled( 'my_plugin_daily_task' ) ) {
20
- wp_schedule_event( time(), 'daily', 'my_plugin_daily_task' );
21
- }
22
- }
23
- register_activation_hook( __FILE__, 'my_plugin_activate' );
24
-
25
- /**
26
- * Cron job callback
27
- */
28
- function my_plugin_daily_task_callback() {
29
- // Task code here
30
- error_log( 'Daily task executed at ' . current_time( 'mysql' ) );
31
-
32
- // Example: Clean up old data
33
- global $wpdb;
34
- $wpdb->query(
35
- $wpdb->prepare(
36
- "DELETE FROM {$wpdb->prefix}my_plugin_data
37
- WHERE created_at < %s
38
- LIMIT 100",
39
- date( 'Y-m-d H:i:s', strtotime( '-30 days' ) )
40
- )
41
- );
42
- }
43
- add_action( 'my_plugin_daily_task', 'my_plugin_daily_task_callback' );
44
- ```
45
-
46
- ### Scheduling a Single Event
47
-
48
- ```php
49
- <?php
50
- /**
51
- * Schedule one-time event
52
- */
53
- function my_plugin_schedule_single_event() {
54
- // Schedule event to run in 1 hour
55
- wp_schedule_single_event( time() + HOUR_IN_SECONDS, 'my_plugin_single_task' );
56
- }
57
-
58
- /**
59
- * Single event callback
60
- */
61
- function my_plugin_single_task_callback() {
62
- // One-time task code
63
- update_option( 'my_plugin_task_completed', true );
64
- }
65
- add_action( 'my_plugin_single_task', 'my_plugin_single_task_callback' );
66
- ```
67
-
68
- ---
69
-
70
- ## Built-in Cron Schedules
71
-
72
- WordPress provides these default schedules:
73
-
74
- - `hourly` - Once per hour
75
- - `twicedaily` - Twice per day
76
- - `daily` - Once per day
77
- - `weekly` - Once per week
78
-
79
- ```php
80
- <?php
81
- // Hourly task
82
- wp_schedule_event( time(), 'hourly', 'my_plugin_hourly_task' );
83
-
84
- // Twice daily task
85
- wp_schedule_event( time(), 'twicedaily', 'my_plugin_twicedaily_task' );
86
-
87
- // Daily task
88
- wp_schedule_event( time(), 'daily', 'my_plugin_daily_task' );
89
-
90
- // Weekly task
91
- wp_schedule_event( time(), 'weekly', 'my_plugin_weekly_task' );
92
- ```
93
-
94
- ---
95
-
96
- ## Custom Cron Schedules
97
-
98
- ### Adding Custom Intervals
99
-
100
- ```php
101
- <?php
102
- /**
103
- * Add custom cron schedules
104
- */
105
- function my_plugin_custom_cron_schedules( $schedules ) {
106
- // Every 5 minutes
107
- $schedules['every_five_minutes'] = array(
108
- 'interval' => 5 * MINUTE_IN_SECONDS,
109
- 'display' => __( 'Every 5 Minutes', 'my-plugin' ),
110
- );
111
-
112
- // Every 15 minutes
113
- $schedules['every_fifteen_minutes'] = array(
114
- 'interval' => 15 * MINUTE_IN_SECONDS,
115
- 'display' => __( 'Every 15 Minutes', 'my-plugin' ),
116
- );
117
-
118
- // Every 30 minutes
119
- $schedules['every_thirty_minutes'] = array(
120
- 'interval' => 30 * MINUTE_IN_SECONDS,
121
- 'display' => __( 'Every 30 Minutes', 'my-plugin' ),
122
- );
123
-
124
- // Every 6 hours
125
- $schedules['every_six_hours'] = array(
126
- 'interval' => 6 * HOUR_IN_SECONDS,
127
- 'display' => __( 'Every 6 Hours', 'my-plugin' ),
128
- );
129
-
130
- // Monthly (30 days)
131
- $schedules['monthly'] = array(
132
- 'interval' => 30 * DAY_IN_SECONDS,
133
- 'display' => __( 'Once Monthly', 'my-plugin' ),
134
- );
135
-
136
- return $schedules;
137
- }
138
- add_filter( 'cron_schedules', 'my_plugin_custom_cron_schedules' );
139
-
140
- /**
141
- * Schedule custom interval task
142
- */
143
- function my_plugin_schedule_custom_task() {
144
- if ( ! wp_next_scheduled( 'my_plugin_custom_task' ) ) {
145
- wp_schedule_event( time(), 'every_five_minutes', 'my_plugin_custom_task' );
146
- }
147
- }
148
- add_action( 'wp', 'my_plugin_schedule_custom_task' );
149
-
150
- /**
151
- * Custom task callback
152
- */
153
- function my_plugin_custom_task_callback() {
154
- // Task code here
155
- }
156
- add_action( 'my_plugin_custom_task', 'my_plugin_custom_task_callback' );
157
- ```
158
-
159
- ---
160
-
161
- ## Managing Scheduled Events
162
-
163
- ### Check if Event is Scheduled
164
-
165
- ```php
166
- <?php
167
- /**
168
- * Check if event is already scheduled
169
- */
170
- $timestamp = wp_next_scheduled( 'my_plugin_daily_task' );
171
-
172
- if ( $timestamp ) {
173
- echo 'Next run: ' . date( 'Y-m-d H:i:s', $timestamp );
174
- } else {
175
- echo 'Not scheduled';
176
- }
177
- ```
178
-
179
- ### Unschedule a Specific Event
180
-
181
- ```php
182
- <?php
183
- /**
184
- * Unschedule specific event
185
- */
186
- $timestamp = wp_next_scheduled( 'my_plugin_daily_task' );
187
-
188
- if ( $timestamp ) {
189
- wp_unschedule_event( $timestamp, 'my_plugin_daily_task' );
190
- }
191
- ```
192
-
193
- ### Clear All Instances of a Hook
194
-
195
- ```php
196
- <?php
197
- /**
198
- * Clear all scheduled instances of a hook
199
- */
200
- wp_clear_scheduled_hook( 'my_plugin_daily_task' );
201
- ```
202
-
203
- ### Reschedule an Event
204
-
205
- ```php
206
- <?php
207
- /**
208
- * Reschedule event with new interval
209
- */
210
- function my_plugin_reschedule_task() {
211
- // Clear existing schedule
212
- wp_clear_scheduled_hook( 'my_plugin_task' );
213
-
214
- // Schedule with new interval
215
- if ( ! wp_next_scheduled( 'my_plugin_task' ) ) {
216
- wp_schedule_event( time(), 'hourly', 'my_plugin_task' );
217
- }
218
- }
219
- ```
220
-
221
- ---
222
-
223
- ## Deactivation and Uninstall
224
-
225
- ### Clear Cron Jobs on Deactivation
226
-
227
- ```php
228
- <?php
229
- /**
230
- * Clear cron jobs on plugin deactivation
231
- */
232
- function my_plugin_deactivate() {
233
- // Clear all scheduled hooks
234
- wp_clear_scheduled_hook( 'my_plugin_daily_task' );
235
- wp_clear_scheduled_hook( 'my_plugin_hourly_task' );
236
- wp_clear_scheduled_hook( 'my_plugin_custom_task' );
237
- }
238
- register_deactivation_hook( __FILE__, 'my_plugin_deactivate' );
239
- ```
240
-
241
- ### Clear Cron Jobs on Uninstall
242
-
243
- ```php
244
- <?php
245
- /**
246
- * uninstall.php
247
- */
248
- if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
249
- exit;
250
- }
251
-
252
- // Clear all scheduled hooks
253
- wp_clear_scheduled_hook( 'my_plugin_daily_task' );
254
- wp_clear_scheduled_hook( 'my_plugin_hourly_task' );
255
- wp_clear_scheduled_hook( 'my_plugin_custom_task' );
256
- ```
257
-
258
- ---
259
-
260
- ## Advanced Patterns
261
-
262
- ### Cron Job with Arguments
263
-
264
- ```php
265
- <?php
266
- /**
267
- * Schedule event with arguments
268
- */
269
- function my_plugin_schedule_task_with_args( $user_id ) {
270
- $args = array( $user_id );
271
-
272
- if ( ! wp_next_scheduled( 'my_plugin_user_task', $args ) ) {
273
- wp_schedule_single_event( time() + HOUR_IN_SECONDS, 'my_plugin_user_task', $args );
274
- }
275
- }
276
-
277
- /**
278
- * Callback with arguments
279
- */
280
- function my_plugin_user_task_callback( $user_id ) {
281
- // Process user-specific task
282
- $user = get_user_by( 'id', $user_id );
283
-
284
- if ( $user ) {
285
- // Send email, update data, etc.
286
- wp_mail(
287
- $user->user_email,
288
- 'Scheduled Task',
289
- 'Your scheduled task has been completed.'
290
- );
291
- }
292
- }
293
- add_action( 'my_plugin_user_task', 'my_plugin_user_task_callback' );
294
- ```
295
-
296
- ### Batch Processing with Cron
297
-
298
- ```php
299
- <?php
300
- /**
301
- * Process items in batches
302
- */
303
- function my_plugin_batch_process_callback() {
304
- global $wpdb;
305
-
306
- $table_name = $wpdb->prefix . 'my_plugin_queue';
307
-
308
- // Get batch of unprocessed items
309
- $items = $wpdb->get_results(
310
- "SELECT * FROM $table_name
311
- WHERE status = 'pending'
312
- ORDER BY created_at ASC
313
- LIMIT 50"
314
- );
315
-
316
- foreach ( $items as $item ) {
317
- // Process item
318
- $result = my_plugin_process_item( $item );
319
-
320
- // Update status
321
- $wpdb->update(
322
- $table_name,
323
- array( 'status' => $result ? 'completed' : 'failed' ),
324
- array( 'id' => $item->id ),
325
- array( '%s' ),
326
- array( '%d' )
327
- );
328
- }
329
-
330
- // Log batch completion
331
- error_log( sprintf( 'Processed %d items', count( $items ) ) );
332
- }
333
- add_action( 'my_plugin_batch_process', 'my_plugin_batch_process_callback' );
334
- ```
335
-
336
- ### Conditional Cron Execution
337
-
338
- ```php
339
- <?php
340
- /**
341
- * Execute cron only under certain conditions
342
- */
343
- function my_plugin_conditional_task_callback() {
344
- // Check if task should run
345
- $should_run = get_option( 'my_plugin_task_enabled', true );
346
-
347
- if ( ! $should_run ) {
348
- error_log( 'Task skipped: disabled in settings' );
349
- return;
350
- }
351
-
352
- // Check time window (e.g., only run during off-peak hours)
353
- $current_hour = (int) current_time( 'H' );
354
-
355
- if ( $current_hour >= 9 && $current_hour <= 17 ) {
356
- error_log( 'Task skipped: peak hours' );
357
- return;
358
- }
359
-
360
- // Execute task
361
- my_plugin_execute_task();
362
- }
363
- add_action( 'my_plugin_conditional_task', 'my_plugin_conditional_task_callback' );
364
- ```
365
-
366
- ### Cron Job with Error Handling
367
-
368
- ```php
369
- <?php
370
- /**
371
- * Cron job with comprehensive error handling
372
- */
373
- function my_plugin_safe_cron_callback() {
374
- try {
375
- // Set time limit
376
- set_time_limit( 300 ); // 5 minutes
377
-
378
- // Execute task
379
- $result = my_plugin_execute_task();
380
-
381
- if ( is_wp_error( $result ) ) {
382
- throw new Exception( $result->get_error_message() );
383
- }
384
-
385
- // Log success
386
- error_log( 'Cron task completed successfully' );
387
- update_option( 'my_plugin_last_cron_run', current_time( 'mysql' ) );
388
-
389
- } catch ( Exception $e ) {
390
- // Log error
391
- error_log( 'Cron task failed: ' . $e->getMessage() );
392
-
393
- // Send admin notification
394
- wp_mail(
395
- get_option( 'admin_email' ),
396
- 'Cron Task Failed',
397
- 'Error: ' . $e->getMessage()
398
- );
399
-
400
- // Update error count
401
- $error_count = (int) get_option( 'my_plugin_cron_errors', 0 );
402
- update_option( 'my_plugin_cron_errors', $error_count + 1 );
403
- }
404
- }
405
- add_action( 'my_plugin_safe_cron', 'my_plugin_safe_cron_callback' );
406
- ```
407
-
408
- ---
409
-
410
- ## Best Practices
411
-
412
- ### Performance
413
-
414
- 1. **Limit batch size**: Process items in small batches to avoid timeouts
415
- 2. **Set time limits**: Use `set_time_limit()` for long-running tasks
416
- 3. **Use LIMIT in queries**: Don't fetch all records at once
417
- 4. **Log execution**: Track when tasks run and how long they take
418
- 5. **Avoid peak hours**: Schedule intensive tasks during off-peak times
419
-
420
- ```php
421
- <?php
422
- // Good - Process in batches
423
- function my_plugin_efficient_cron() {
424
- global $wpdb;
425
-
426
- $batch_size = 50;
427
- $processed = 0;
428
-
429
- $items = $wpdb->get_results(
430
- $wpdb->prepare(
431
- "SELECT * FROM {$wpdb->prefix}my_plugin_data
432
- WHERE status = 'pending'
433
- LIMIT %d",
434
- $batch_size
435
- )
436
- );
437
-
438
- foreach ( $items as $item ) {
439
- my_plugin_process_item( $item );
440
- $processed++;
441
- }
442
-
443
- error_log( "Processed $processed items" );
444
- }
445
- ```
446
-
447
- ### Reliability
448
-
449
- 1. **Check if scheduled**: Always check `wp_next_scheduled()` before scheduling
450
- 2. **Clear on deactivation**: Remove scheduled events when plugin is deactivated
451
- 3. **Handle errors**: Use try-catch blocks and log errors
452
- 4. **Verify execution**: Log when tasks run successfully
453
- 5. **Monitor failures**: Track and alert on repeated failures
454
-
455
- ```php
456
- <?php
457
- // Good - Check before scheduling
458
- function my_plugin_ensure_cron_scheduled() {
459
- if ( ! wp_next_scheduled( 'my_plugin_task' ) ) {
460
- wp_schedule_event( time(), 'daily', 'my_plugin_task' );
461
- }
462
- }
463
- add_action( 'wp', 'my_plugin_ensure_cron_scheduled' );
464
- ```
465
-
466
- ### Security
467
-
468
- 1. **Validate data**: Sanitize and validate all data in cron callbacks
469
- 2. **Check capabilities**: Verify permissions if needed
470
- 3. **Use nonces**: For user-triggered scheduled events
471
- 4. **Limit access**: Don't expose cron URLs publicly
472
- 5. **Log suspicious activity**: Monitor for unusual patterns
473
-
474
- ```php
475
- <?php
476
- // Good - Validate data in cron callback
477
- function my_plugin_secure_cron_callback() {
478
- global $wpdb;
479
-
480
- $items = $wpdb->get_results(
481
- "SELECT * FROM {$wpdb->prefix}my_plugin_data
482
- WHERE status = 'pending'
483
- LIMIT 50"
484
- );
485
-
486
- foreach ( $items as $item ) {
487
- // Validate data before processing
488
- $email = sanitize_email( $item->email );
489
- $user_id = absint( $item->user_id );
490
-
491
- if ( ! is_email( $email ) || ! $user_id ) {
492
- error_log( "Invalid data in cron: item ID {$item->id}" );
493
- continue;
494
- }
495
-
496
- // Process validated data
497
- my_plugin_send_email( $email, $user_id );
498
- }
499
- }
500
- ```
501
-
502
- ---
503
-
504
- ## Debugging Cron Jobs
505
-
506
- ### View Scheduled Events
507
-
508
- ```php
509
- <?php
510
- /**
511
- * Display all scheduled cron events (admin page)
512
- */
513
- function my_plugin_display_cron_events() {
514
- if ( ! current_user_can( 'manage_options' ) ) {
515
- return;
516
- }
517
-
518
- $cron_array = _get_cron_array();
519
-
520
- echo '<h2>Scheduled Events</h2>';
521
- echo '<table>';
522
- echo '<tr><th>Hook</th><th>Next Run</th><th>Schedule</th></tr>';
523
-
524
- foreach ( $cron_array as $timestamp => $cron ) {
525
- foreach ( $cron as $hook => $events ) {
526
- foreach ( $events as $key => $event ) {
527
- echo '<tr>';
528
- echo '<td>' . esc_html( $hook ) . '</td>';
529
- echo '<td>' . date( 'Y-m-d H:i:s', $timestamp ) . '</td>';
530
- echo '<td>' . ( isset( $event['schedule'] ) ? esc_html( $event['schedule'] ) : 'Single' ) . '</td>';
531
- echo '</tr>';
532
- }
533
- }
534
- }
535
-
536
- echo '</table>';
537
- }
538
- ```
539
-
540
- ### Test Cron Job Manually
541
-
542
- ```php
543
- <?php
544
- /**
545
- * Manually trigger cron job for testing
546
- */
547
- function my_plugin_test_cron() {
548
- if ( ! current_user_can( 'manage_options' ) ) {
549
- wp_die( 'Unauthorized' );
550
- }
551
-
552
- // Trigger the cron callback directly
553
- do_action( 'my_plugin_daily_task' );
554
-
555
- echo 'Cron job executed manually';
556
- }
557
-
558
- // Add admin menu item for testing
559
- add_action( 'admin_menu', function() {
560
- add_submenu_page(
561
- 'tools.php',
562
- 'Test Cron',
563
- 'Test Cron',
564
- 'manage_options',
565
- 'test-cron',
566
- 'my_plugin_test_cron'
567
- );
568
- } );
569
- ```
570
-
571
- ### Enable WP-Cron Debugging
572
-
573
- ```php
574
- <?php
575
- /**
576
- * wp-config.php
577
- */
578
- define( 'WP_DEBUG', true );
579
- define( 'WP_DEBUG_LOG', true );
580
-
581
- /**
582
- * Log cron execution
583
- */
584
- function my_plugin_log_cron_execution() {
585
- error_log( 'Cron executed: ' . current_action() );
586
- }
587
- add_action( 'my_plugin_daily_task', 'my_plugin_log_cron_execution', 1 );
588
- ```
589
-
590
- ---
591
-
592
- ## Alternative: System Cron
593
-
594
- For better reliability, use system cron instead of WP-Cron:
595
-
596
- ### Disable WP-Cron
597
-
598
- ```php
599
- <?php
600
- /**
601
- * wp-config.php
602
- */
603
- define( 'DISABLE_WP_CRON', true );
604
- ```
605
-
606
- ### Setup System Cron
607
-
608
- ```bash
609
- # Edit crontab
610
- crontab -e
611
-
612
- # Add line to run WP-Cron every 5 minutes
613
- */5 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
614
-
615
- # Or using curl
616
- */5 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
617
-
618
- # Or using WP-CLI
619
- */5 * * * * cd /path/to/wordpress && wp cron event run --due-now >/dev/null 2>&1
620
- ```
621
-
622
- ---
623
-
624
- ## Common Pitfalls
625
-
626
- ### ❌ DON'T
627
-
628
- ```php
629
- <?php
630
- // Don't schedule without checking
631
- wp_schedule_event( time(), 'daily', 'my_task' ); // WRONG - Creates duplicates
632
-
633
- // Don't forget to clear on deactivation
634
- function my_plugin_deactivate() {
635
- // Missing: wp_clear_scheduled_hook( 'my_task' );
636
- } // WRONG
637
-
638
- // Don't use infinite loops
639
- function my_bad_cron_callback() {
640
- while ( true ) {
641
- // Process items
642
- }
643
- } // WRONG - Will timeout
644
-
645
- // Don't process all items at once
646
- function my_bad_batch_process() {
647
- $items = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}items" ); // WRONG - No LIMIT
648
- foreach ( $items as $item ) {
649
- process_item( $item );
650
- }
651
- }
652
-
653
- // Don't ignore errors
654
- function my_bad_error_handling() {
655
- my_risky_operation(); // WRONG - No error handling
656
- }
657
-
658
- // Don't hardcode timestamps
659
- wp_schedule_event( 1234567890, 'daily', 'my_task' ); // WRONG - Use time()
660
- ```
661
-
662
- ### ✅ DO
663
-
664
- ```php
665
- <?php
666
- // Always check before scheduling
667
- if ( ! wp_next_scheduled( 'my_task' ) ) {
668
- wp_schedule_event( time(), 'daily', 'my_task' );
669
- } // CORRECT
670
-
671
- // Clear on deactivation
672
- function my_plugin_deactivate() {
673
- wp_clear_scheduled_hook( 'my_task' );
674
- } // CORRECT
675
- register_deactivation_hook( __FILE__, 'my_plugin_deactivate' );
676
-
677
- // Process in batches
678
- function my_good_batch_process() {
679
- global $wpdb;
680
-
681
- $items = $wpdb->get_results(
682
- "SELECT * FROM {$wpdb->prefix}items
683
- WHERE status = 'pending'
684
- LIMIT 50"
685
- ); // CORRECT - Limited batch
686
-
687
- foreach ( $items as $item ) {
688
- process_item( $item );
689
- }
690
- }
691
-
692
- // Handle errors
693
- function my_good_error_handling() {
694
- try {
695
- my_risky_operation();
696
- } catch ( Exception $e ) {
697
- error_log( 'Cron error: ' . $e->getMessage() );
698
- }
699
- } // CORRECT
700
-
701
- // Use time() for current timestamp
702
- wp_schedule_event( time(), 'daily', 'my_task' ); // CORRECT
703
- ```
704
-
705
- ---
706
-
707
- ## Summary
708
-
709
- **Key Takeaways:**
710
-
711
- 1. **Scheduling**: Use `wp_schedule_event()` for recurring tasks, `wp_schedule_single_event()` for one-time tasks
712
- 2. **Custom intervals**: Add custom schedules with `cron_schedules` filter
713
- 3. **Check before scheduling**: Always use `wp_next_scheduled()` to avoid duplicates
714
- 4. **Unscheduling**: Use `wp_unschedule_event()` for specific events, `wp_clear_scheduled_hook()` for all instances
715
- 5. **Deactivation**: Clear all scheduled hooks on plugin deactivation
716
- 6. **Batch processing**: Process items in small batches to avoid timeouts
717
- 7. **Error handling**: Use try-catch blocks and log errors
718
- 8. **Debugging**: Test cron jobs manually and monitor execution
719
- 9. **System cron**: Consider using system cron for better reliability
720
-
721
- **Common Mistakes to Avoid:**
722
-
723
- - Scheduling without checking for existing events
724
- - Forgetting to clear scheduled hooks on deactivation
725
- - Processing too many items at once
726
- - Ignoring errors and timeouts
727
- - Not logging execution for debugging
728
- - Using hardcoded timestamps instead of `time()`
729
-
730
- **Resources:**
731
-
732
- - [WordPress Cron API](https://developer.wordpress.org/plugins/cron/)
733
- - [wp_schedule_event()](https://developer.wordpress.org/reference/functions/wp_schedule_event/)
734
- - [wp_next_scheduled()](https://developer.wordpress.org/reference/functions/wp_next_scheduled/)
735
- - [wp_clear_scheduled_hook()](https://developer.wordpress.org/reference/functions/wp_clear_scheduled_hook/)
736
-
1
+ # Cron Jobs and Scheduled Tasks
2
+
3
+ ## Overview
4
+
5
+ This guide covers WordPress cron job implementation for scheduled tasks including wp_schedule_event, custom cron schedules, wp_next_scheduled, wp_unschedule_event, and wp_clear_scheduled_hook.
6
+
7
+ ---
8
+
9
+ ## Basic Cron Job Setup
10
+
11
+ ### Scheduling a Recurring Event
12
+
13
+ ```php
14
+ <?php
15
+ /**
16
+ * Schedule cron job on plugin activation
17
+ */
18
+ function my_plugin_activate() {
19
+ if ( ! wp_next_scheduled( 'my_plugin_daily_task' ) ) {
20
+ wp_schedule_event( time(), 'daily', 'my_plugin_daily_task' );
21
+ }
22
+ }
23
+ register_activation_hook( __FILE__, 'my_plugin_activate' );
24
+
25
+ /**
26
+ * Cron job callback
27
+ */
28
+ function my_plugin_daily_task_callback() {
29
+ // Task code here
30
+ error_log( 'Daily task executed at ' . current_time( 'mysql' ) );
31
+
32
+ // Example: Clean up old data
33
+ global $wpdb;
34
+ $wpdb->query(
35
+ $wpdb->prepare(
36
+ "DELETE FROM {$wpdb->prefix}my_plugin_data
37
+ WHERE created_at < %s
38
+ LIMIT 100",
39
+ date( 'Y-m-d H:i:s', strtotime( '-30 days' ) )
40
+ )
41
+ );
42
+ }
43
+ add_action( 'my_plugin_daily_task', 'my_plugin_daily_task_callback' );
44
+ ```
45
+
46
+ ### Scheduling a Single Event
47
+
48
+ ```php
49
+ <?php
50
+ /**
51
+ * Schedule one-time event
52
+ */
53
+ function my_plugin_schedule_single_event() {
54
+ // Schedule event to run in 1 hour
55
+ wp_schedule_single_event( time() + HOUR_IN_SECONDS, 'my_plugin_single_task' );
56
+ }
57
+
58
+ /**
59
+ * Single event callback
60
+ */
61
+ function my_plugin_single_task_callback() {
62
+ // One-time task code
63
+ update_option( 'my_plugin_task_completed', true );
64
+ }
65
+ add_action( 'my_plugin_single_task', 'my_plugin_single_task_callback' );
66
+ ```
67
+
68
+ ---
69
+
70
+ ## Built-in Cron Schedules
71
+
72
+ WordPress provides these default schedules:
73
+
74
+ - `hourly` - Once per hour
75
+ - `twicedaily` - Twice per day
76
+ - `daily` - Once per day
77
+ - `weekly` - Once per week
78
+
79
+ ```php
80
+ <?php
81
+ // Hourly task
82
+ wp_schedule_event( time(), 'hourly', 'my_plugin_hourly_task' );
83
+
84
+ // Twice daily task
85
+ wp_schedule_event( time(), 'twicedaily', 'my_plugin_twicedaily_task' );
86
+
87
+ // Daily task
88
+ wp_schedule_event( time(), 'daily', 'my_plugin_daily_task' );
89
+
90
+ // Weekly task
91
+ wp_schedule_event( time(), 'weekly', 'my_plugin_weekly_task' );
92
+ ```
93
+
94
+ ---
95
+
96
+ ## Custom Cron Schedules
97
+
98
+ ### Adding Custom Intervals
99
+
100
+ ```php
101
+ <?php
102
+ /**
103
+ * Add custom cron schedules
104
+ */
105
+ function my_plugin_custom_cron_schedules( $schedules ) {
106
+ // Every 5 minutes
107
+ $schedules['every_five_minutes'] = array(
108
+ 'interval' => 5 * MINUTE_IN_SECONDS,
109
+ 'display' => __( 'Every 5 Minutes', 'my-plugin' ),
110
+ );
111
+
112
+ // Every 15 minutes
113
+ $schedules['every_fifteen_minutes'] = array(
114
+ 'interval' => 15 * MINUTE_IN_SECONDS,
115
+ 'display' => __( 'Every 15 Minutes', 'my-plugin' ),
116
+ );
117
+
118
+ // Every 30 minutes
119
+ $schedules['every_thirty_minutes'] = array(
120
+ 'interval' => 30 * MINUTE_IN_SECONDS,
121
+ 'display' => __( 'Every 30 Minutes', 'my-plugin' ),
122
+ );
123
+
124
+ // Every 6 hours
125
+ $schedules['every_six_hours'] = array(
126
+ 'interval' => 6 * HOUR_IN_SECONDS,
127
+ 'display' => __( 'Every 6 Hours', 'my-plugin' ),
128
+ );
129
+
130
+ // Monthly (30 days)
131
+ $schedules['monthly'] = array(
132
+ 'interval' => 30 * DAY_IN_SECONDS,
133
+ 'display' => __( 'Once Monthly', 'my-plugin' ),
134
+ );
135
+
136
+ return $schedules;
137
+ }
138
+ add_filter( 'cron_schedules', 'my_plugin_custom_cron_schedules' );
139
+
140
+ /**
141
+ * Schedule custom interval task
142
+ */
143
+ function my_plugin_schedule_custom_task() {
144
+ if ( ! wp_next_scheduled( 'my_plugin_custom_task' ) ) {
145
+ wp_schedule_event( time(), 'every_five_minutes', 'my_plugin_custom_task' );
146
+ }
147
+ }
148
+ add_action( 'wp', 'my_plugin_schedule_custom_task' );
149
+
150
+ /**
151
+ * Custom task callback
152
+ */
153
+ function my_plugin_custom_task_callback() {
154
+ // Task code here
155
+ }
156
+ add_action( 'my_plugin_custom_task', 'my_plugin_custom_task_callback' );
157
+ ```
158
+
159
+ ---
160
+
161
+ ## Managing Scheduled Events
162
+
163
+ ### Check if Event is Scheduled
164
+
165
+ ```php
166
+ <?php
167
+ /**
168
+ * Check if event is already scheduled
169
+ */
170
+ $timestamp = wp_next_scheduled( 'my_plugin_daily_task' );
171
+
172
+ if ( $timestamp ) {
173
+ echo 'Next run: ' . date( 'Y-m-d H:i:s', $timestamp );
174
+ } else {
175
+ echo 'Not scheduled';
176
+ }
177
+ ```
178
+
179
+ ### Unschedule a Specific Event
180
+
181
+ ```php
182
+ <?php
183
+ /**
184
+ * Unschedule specific event
185
+ */
186
+ $timestamp = wp_next_scheduled( 'my_plugin_daily_task' );
187
+
188
+ if ( $timestamp ) {
189
+ wp_unschedule_event( $timestamp, 'my_plugin_daily_task' );
190
+ }
191
+ ```
192
+
193
+ ### Clear All Instances of a Hook
194
+
195
+ ```php
196
+ <?php
197
+ /**
198
+ * Clear all scheduled instances of a hook
199
+ */
200
+ wp_clear_scheduled_hook( 'my_plugin_daily_task' );
201
+ ```
202
+
203
+ ### Reschedule an Event
204
+
205
+ ```php
206
+ <?php
207
+ /**
208
+ * Reschedule event with new interval
209
+ */
210
+ function my_plugin_reschedule_task() {
211
+ // Clear existing schedule
212
+ wp_clear_scheduled_hook( 'my_plugin_task' );
213
+
214
+ // Schedule with new interval
215
+ if ( ! wp_next_scheduled( 'my_plugin_task' ) ) {
216
+ wp_schedule_event( time(), 'hourly', 'my_plugin_task' );
217
+ }
218
+ }
219
+ ```
220
+
221
+ ---
222
+
223
+ ## Deactivation and Uninstall
224
+
225
+ ### Clear Cron Jobs on Deactivation
226
+
227
+ ```php
228
+ <?php
229
+ /**
230
+ * Clear cron jobs on plugin deactivation
231
+ */
232
+ function my_plugin_deactivate() {
233
+ // Clear all scheduled hooks
234
+ wp_clear_scheduled_hook( 'my_plugin_daily_task' );
235
+ wp_clear_scheduled_hook( 'my_plugin_hourly_task' );
236
+ wp_clear_scheduled_hook( 'my_plugin_custom_task' );
237
+ }
238
+ register_deactivation_hook( __FILE__, 'my_plugin_deactivate' );
239
+ ```
240
+
241
+ ### Clear Cron Jobs on Uninstall
242
+
243
+ ```php
244
+ <?php
245
+ /**
246
+ * uninstall.php
247
+ */
248
+ if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
249
+ exit;
250
+ }
251
+
252
+ // Clear all scheduled hooks
253
+ wp_clear_scheduled_hook( 'my_plugin_daily_task' );
254
+ wp_clear_scheduled_hook( 'my_plugin_hourly_task' );
255
+ wp_clear_scheduled_hook( 'my_plugin_custom_task' );
256
+ ```
257
+
258
+ ---
259
+
260
+ ## Advanced Patterns
261
+
262
+ ### Cron Job with Arguments
263
+
264
+ ```php
265
+ <?php
266
+ /**
267
+ * Schedule event with arguments
268
+ */
269
+ function my_plugin_schedule_task_with_args( $user_id ) {
270
+ $args = array( $user_id );
271
+
272
+ if ( ! wp_next_scheduled( 'my_plugin_user_task', $args ) ) {
273
+ wp_schedule_single_event( time() + HOUR_IN_SECONDS, 'my_plugin_user_task', $args );
274
+ }
275
+ }
276
+
277
+ /**
278
+ * Callback with arguments
279
+ */
280
+ function my_plugin_user_task_callback( $user_id ) {
281
+ // Process user-specific task
282
+ $user = get_user_by( 'id', $user_id );
283
+
284
+ if ( $user ) {
285
+ // Send email, update data, etc.
286
+ wp_mail(
287
+ $user->user_email,
288
+ 'Scheduled Task',
289
+ 'Your scheduled task has been completed.'
290
+ );
291
+ }
292
+ }
293
+ add_action( 'my_plugin_user_task', 'my_plugin_user_task_callback' );
294
+ ```
295
+
296
+ ### Batch Processing with Cron
297
+
298
+ ```php
299
+ <?php
300
+ /**
301
+ * Process items in batches
302
+ */
303
+ function my_plugin_batch_process_callback() {
304
+ global $wpdb;
305
+
306
+ $table_name = $wpdb->prefix . 'my_plugin_queue';
307
+
308
+ // Get batch of unprocessed items
309
+ $items = $wpdb->get_results(
310
+ "SELECT * FROM $table_name
311
+ WHERE status = 'pending'
312
+ ORDER BY created_at ASC
313
+ LIMIT 50"
314
+ );
315
+
316
+ foreach ( $items as $item ) {
317
+ // Process item
318
+ $result = my_plugin_process_item( $item );
319
+
320
+ // Update status
321
+ $wpdb->update(
322
+ $table_name,
323
+ array( 'status' => $result ? 'completed' : 'failed' ),
324
+ array( 'id' => $item->id ),
325
+ array( '%s' ),
326
+ array( '%d' )
327
+ );
328
+ }
329
+
330
+ // Log batch completion
331
+ error_log( sprintf( 'Processed %d items', count( $items ) ) );
332
+ }
333
+ add_action( 'my_plugin_batch_process', 'my_plugin_batch_process_callback' );
334
+ ```
335
+
336
+ ### Conditional Cron Execution
337
+
338
+ ```php
339
+ <?php
340
+ /**
341
+ * Execute cron only under certain conditions
342
+ */
343
+ function my_plugin_conditional_task_callback() {
344
+ // Check if task should run
345
+ $should_run = get_option( 'my_plugin_task_enabled', true );
346
+
347
+ if ( ! $should_run ) {
348
+ error_log( 'Task skipped: disabled in settings' );
349
+ return;
350
+ }
351
+
352
+ // Check time window (e.g., only run during off-peak hours)
353
+ $current_hour = (int) current_time( 'H' );
354
+
355
+ if ( $current_hour >= 9 && $current_hour <= 17 ) {
356
+ error_log( 'Task skipped: peak hours' );
357
+ return;
358
+ }
359
+
360
+ // Execute task
361
+ my_plugin_execute_task();
362
+ }
363
+ add_action( 'my_plugin_conditional_task', 'my_plugin_conditional_task_callback' );
364
+ ```
365
+
366
+ ### Cron Job with Error Handling
367
+
368
+ ```php
369
+ <?php
370
+ /**
371
+ * Cron job with comprehensive error handling
372
+ */
373
+ function my_plugin_safe_cron_callback() {
374
+ try {
375
+ // Set time limit
376
+ set_time_limit( 300 ); // 5 minutes
377
+
378
+ // Execute task
379
+ $result = my_plugin_execute_task();
380
+
381
+ if ( is_wp_error( $result ) ) {
382
+ throw new Exception( $result->get_error_message() );
383
+ }
384
+
385
+ // Log success
386
+ error_log( 'Cron task completed successfully' );
387
+ update_option( 'my_plugin_last_cron_run', current_time( 'mysql' ) );
388
+
389
+ } catch ( Exception $e ) {
390
+ // Log error
391
+ error_log( 'Cron task failed: ' . $e->getMessage() );
392
+
393
+ // Send admin notification
394
+ wp_mail(
395
+ get_option( 'admin_email' ),
396
+ 'Cron Task Failed',
397
+ 'Error: ' . $e->getMessage()
398
+ );
399
+
400
+ // Update error count
401
+ $error_count = (int) get_option( 'my_plugin_cron_errors', 0 );
402
+ update_option( 'my_plugin_cron_errors', $error_count + 1 );
403
+ }
404
+ }
405
+ add_action( 'my_plugin_safe_cron', 'my_plugin_safe_cron_callback' );
406
+ ```
407
+
408
+ ---
409
+
410
+ ## Best Practices
411
+
412
+ ### Performance
413
+
414
+ 1. **Limit batch size**: Process items in small batches to avoid timeouts
415
+ 2. **Set time limits**: Use `set_time_limit()` for long-running tasks
416
+ 3. **Use LIMIT in queries**: Don't fetch all records at once
417
+ 4. **Log execution**: Track when tasks run and how long they take
418
+ 5. **Avoid peak hours**: Schedule intensive tasks during off-peak times
419
+
420
+ ```php
421
+ <?php
422
+ // Good - Process in batches
423
+ function my_plugin_efficient_cron() {
424
+ global $wpdb;
425
+
426
+ $batch_size = 50;
427
+ $processed = 0;
428
+
429
+ $items = $wpdb->get_results(
430
+ $wpdb->prepare(
431
+ "SELECT * FROM {$wpdb->prefix}my_plugin_data
432
+ WHERE status = 'pending'
433
+ LIMIT %d",
434
+ $batch_size
435
+ )
436
+ );
437
+
438
+ foreach ( $items as $item ) {
439
+ my_plugin_process_item( $item );
440
+ $processed++;
441
+ }
442
+
443
+ error_log( "Processed $processed items" );
444
+ }
445
+ ```
446
+
447
+ ### Reliability
448
+
449
+ 1. **Check if scheduled**: Always check `wp_next_scheduled()` before scheduling
450
+ 2. **Clear on deactivation**: Remove scheduled events when plugin is deactivated
451
+ 3. **Handle errors**: Use try-catch blocks and log errors
452
+ 4. **Verify execution**: Log when tasks run successfully
453
+ 5. **Monitor failures**: Track and alert on repeated failures
454
+
455
+ ```php
456
+ <?php
457
+ // Good - Check before scheduling
458
+ function my_plugin_ensure_cron_scheduled() {
459
+ if ( ! wp_next_scheduled( 'my_plugin_task' ) ) {
460
+ wp_schedule_event( time(), 'daily', 'my_plugin_task' );
461
+ }
462
+ }
463
+ add_action( 'wp', 'my_plugin_ensure_cron_scheduled' );
464
+ ```
465
+
466
+ ### Security
467
+
468
+ 1. **Validate data**: Sanitize and validate all data in cron callbacks
469
+ 2. **Check capabilities**: Verify permissions if needed
470
+ 3. **Use nonces**: For user-triggered scheduled events
471
+ 4. **Limit access**: Don't expose cron URLs publicly
472
+ 5. **Log suspicious activity**: Monitor for unusual patterns
473
+
474
+ ```php
475
+ <?php
476
+ // Good - Validate data in cron callback
477
+ function my_plugin_secure_cron_callback() {
478
+ global $wpdb;
479
+
480
+ $items = $wpdb->get_results(
481
+ "SELECT * FROM {$wpdb->prefix}my_plugin_data
482
+ WHERE status = 'pending'
483
+ LIMIT 50"
484
+ );
485
+
486
+ foreach ( $items as $item ) {
487
+ // Validate data before processing
488
+ $email = sanitize_email( $item->email );
489
+ $user_id = absint( $item->user_id );
490
+
491
+ if ( ! is_email( $email ) || ! $user_id ) {
492
+ error_log( "Invalid data in cron: item ID {$item->id}" );
493
+ continue;
494
+ }
495
+
496
+ // Process validated data
497
+ my_plugin_send_email( $email, $user_id );
498
+ }
499
+ }
500
+ ```
501
+
502
+ ---
503
+
504
+ ## Debugging Cron Jobs
505
+
506
+ ### View Scheduled Events
507
+
508
+ ```php
509
+ <?php
510
+ /**
511
+ * Display all scheduled cron events (admin page)
512
+ */
513
+ function my_plugin_display_cron_events() {
514
+ if ( ! current_user_can( 'manage_options' ) ) {
515
+ return;
516
+ }
517
+
518
+ $cron_array = _get_cron_array();
519
+
520
+ echo '<h2>Scheduled Events</h2>';
521
+ echo '<table>';
522
+ echo '<tr><th>Hook</th><th>Next Run</th><th>Schedule</th></tr>';
523
+
524
+ foreach ( $cron_array as $timestamp => $cron ) {
525
+ foreach ( $cron as $hook => $events ) {
526
+ foreach ( $events as $key => $event ) {
527
+ echo '<tr>';
528
+ echo '<td>' . esc_html( $hook ) . '</td>';
529
+ echo '<td>' . date( 'Y-m-d H:i:s', $timestamp ) . '</td>';
530
+ echo '<td>' . ( isset( $event['schedule'] ) ? esc_html( $event['schedule'] ) : 'Single' ) . '</td>';
531
+ echo '</tr>';
532
+ }
533
+ }
534
+ }
535
+
536
+ echo '</table>';
537
+ }
538
+ ```
539
+
540
+ ### Test Cron Job Manually
541
+
542
+ ```php
543
+ <?php
544
+ /**
545
+ * Manually trigger cron job for testing
546
+ */
547
+ function my_plugin_test_cron() {
548
+ if ( ! current_user_can( 'manage_options' ) ) {
549
+ wp_die( 'Unauthorized' );
550
+ }
551
+
552
+ // Trigger the cron callback directly
553
+ do_action( 'my_plugin_daily_task' );
554
+
555
+ echo 'Cron job executed manually';
556
+ }
557
+
558
+ // Add admin menu item for testing
559
+ add_action( 'admin_menu', function() {
560
+ add_submenu_page(
561
+ 'tools.php',
562
+ 'Test Cron',
563
+ 'Test Cron',
564
+ 'manage_options',
565
+ 'test-cron',
566
+ 'my_plugin_test_cron'
567
+ );
568
+ } );
569
+ ```
570
+
571
+ ### Enable WP-Cron Debugging
572
+
573
+ ```php
574
+ <?php
575
+ /**
576
+ * wp-config.php
577
+ */
578
+ define( 'WP_DEBUG', true );
579
+ define( 'WP_DEBUG_LOG', true );
580
+
581
+ /**
582
+ * Log cron execution
583
+ */
584
+ function my_plugin_log_cron_execution() {
585
+ error_log( 'Cron executed: ' . current_action() );
586
+ }
587
+ add_action( 'my_plugin_daily_task', 'my_plugin_log_cron_execution', 1 );
588
+ ```
589
+
590
+ ---
591
+
592
+ ## Alternative: System Cron
593
+
594
+ For better reliability, use system cron instead of WP-Cron:
595
+
596
+ ### Disable WP-Cron
597
+
598
+ ```php
599
+ <?php
600
+ /**
601
+ * wp-config.php
602
+ */
603
+ define( 'DISABLE_WP_CRON', true );
604
+ ```
605
+
606
+ ### Setup System Cron
607
+
608
+ ```bash
609
+ # Edit crontab
610
+ crontab -e
611
+
612
+ # Add line to run WP-Cron every 5 minutes
613
+ */5 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
614
+
615
+ # Or using curl
616
+ */5 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
617
+
618
+ # Or using WP-CLI
619
+ */5 * * * * cd /path/to/wordpress && wp cron event run --due-now >/dev/null 2>&1
620
+ ```
621
+
622
+ ---
623
+
624
+ ## Common Pitfalls
625
+
626
+ ### ❌ DON'T
627
+
628
+ ```php
629
+ <?php
630
+ // Don't schedule without checking
631
+ wp_schedule_event( time(), 'daily', 'my_task' ); // WRONG - Creates duplicates
632
+
633
+ // Don't forget to clear on deactivation
634
+ function my_plugin_deactivate() {
635
+ // Missing: wp_clear_scheduled_hook( 'my_task' );
636
+ } // WRONG
637
+
638
+ // Don't use infinite loops
639
+ function my_bad_cron_callback() {
640
+ while ( true ) {
641
+ // Process items
642
+ }
643
+ } // WRONG - Will timeout
644
+
645
+ // Don't process all items at once
646
+ function my_bad_batch_process() {
647
+ $items = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}items" ); // WRONG - No LIMIT
648
+ foreach ( $items as $item ) {
649
+ process_item( $item );
650
+ }
651
+ }
652
+
653
+ // Don't ignore errors
654
+ function my_bad_error_handling() {
655
+ my_risky_operation(); // WRONG - No error handling
656
+ }
657
+
658
+ // Don't hardcode timestamps
659
+ wp_schedule_event( 1234567890, 'daily', 'my_task' ); // WRONG - Use time()
660
+ ```
661
+
662
+ ### ✅ DO
663
+
664
+ ```php
665
+ <?php
666
+ // Always check before scheduling
667
+ if ( ! wp_next_scheduled( 'my_task' ) ) {
668
+ wp_schedule_event( time(), 'daily', 'my_task' );
669
+ } // CORRECT
670
+
671
+ // Clear on deactivation
672
+ function my_plugin_deactivate() {
673
+ wp_clear_scheduled_hook( 'my_task' );
674
+ } // CORRECT
675
+ register_deactivation_hook( __FILE__, 'my_plugin_deactivate' );
676
+
677
+ // Process in batches
678
+ function my_good_batch_process() {
679
+ global $wpdb;
680
+
681
+ $items = $wpdb->get_results(
682
+ "SELECT * FROM {$wpdb->prefix}items
683
+ WHERE status = 'pending'
684
+ LIMIT 50"
685
+ ); // CORRECT - Limited batch
686
+
687
+ foreach ( $items as $item ) {
688
+ process_item( $item );
689
+ }
690
+ }
691
+
692
+ // Handle errors
693
+ function my_good_error_handling() {
694
+ try {
695
+ my_risky_operation();
696
+ } catch ( Exception $e ) {
697
+ error_log( 'Cron error: ' . $e->getMessage() );
698
+ }
699
+ } // CORRECT
700
+
701
+ // Use time() for current timestamp
702
+ wp_schedule_event( time(), 'daily', 'my_task' ); // CORRECT
703
+ ```
704
+
705
+ ---
706
+
707
+ ## Summary
708
+
709
+ **Key Takeaways:**
710
+
711
+ 1. **Scheduling**: Use `wp_schedule_event()` for recurring tasks, `wp_schedule_single_event()` for one-time tasks
712
+ 2. **Custom intervals**: Add custom schedules with `cron_schedules` filter
713
+ 3. **Check before scheduling**: Always use `wp_next_scheduled()` to avoid duplicates
714
+ 4. **Unscheduling**: Use `wp_unschedule_event()` for specific events, `wp_clear_scheduled_hook()` for all instances
715
+ 5. **Deactivation**: Clear all scheduled hooks on plugin deactivation
716
+ 6. **Batch processing**: Process items in small batches to avoid timeouts
717
+ 7. **Error handling**: Use try-catch blocks and log errors
718
+ 8. **Debugging**: Test cron jobs manually and monitor execution
719
+ 9. **System cron**: Consider using system cron for better reliability
720
+
721
+ **Common Mistakes to Avoid:**
722
+
723
+ - Scheduling without checking for existing events
724
+ - Forgetting to clear scheduled hooks on deactivation
725
+ - Processing too many items at once
726
+ - Ignoring errors and timeouts
727
+ - Not logging execution for debugging
728
+ - Using hardcoded timestamps instead of `time()`
729
+
730
+ **Resources:**
731
+
732
+ - [WordPress Cron API](https://developer.wordpress.org/plugins/cron/)
733
+ - [wp_schedule_event()](https://developer.wordpress.org/reference/functions/wp_schedule_event/)
734
+ - [wp_next_scheduled()](https://developer.wordpress.org/reference/functions/wp_next_scheduled/)
735
+ - [wp_clear_scheduled_hook()](https://developer.wordpress.org/reference/functions/wp_clear_scheduled_hook/)
736
+