ima-claude 2.9.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 (182) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +463 -0
  3. package/dist/cli.js +1064 -0
  4. package/package.json +49 -0
  5. package/platforms/claude/adapter.ts +115 -0
  6. package/platforms/junie/adapter.ts +254 -0
  7. package/platforms/junie/agents-template.md +113 -0
  8. package/platforms/junie/hook-translations.md +84 -0
  9. package/platforms/shared/detector.ts +27 -0
  10. package/platforms/shared/installer.ts +202 -0
  11. package/platforms/shared/types.ts +78 -0
  12. package/plugins/ima-claude/.claude-plugin/plugin.json +25 -0
  13. package/plugins/ima-claude/agents/explorer.md +30 -0
  14. package/plugins/ima-claude/agents/implementer.md +30 -0
  15. package/plugins/ima-claude/agents/memory.md +42 -0
  16. package/plugins/ima-claude/agents/reviewer.md +53 -0
  17. package/plugins/ima-claude/agents/tester.md +33 -0
  18. package/plugins/ima-claude/agents/wp-developer.md +46 -0
  19. package/plugins/ima-claude/hooks/README.md +145 -0
  20. package/plugins/ima-claude/hooks/atlassian_prereqs.py +112 -0
  21. package/plugins/ima-claude/hooks/block_sed_edits.py +59 -0
  22. package/plugins/ima-claude/hooks/bootstrap.sh +90 -0
  23. package/plugins/ima-claude/hooks/bootstrap_utility_check.py +94 -0
  24. package/plugins/ima-claude/hooks/composer_autoload_check.py +70 -0
  25. package/plugins/ima-claude/hooks/docs_organization.py +104 -0
  26. package/plugins/ima-claude/hooks/enforce_rg_over_grep.py +56 -0
  27. package/plugins/ima-claude/hooks/fp_utility_check.py +90 -0
  28. package/plugins/ima-claude/hooks/hook_logger.py +69 -0
  29. package/plugins/ima-claude/hooks/hooks.json +239 -0
  30. package/plugins/ima-claude/hooks/jira_issue_fetch.py +79 -0
  31. package/plugins/ima-claude/hooks/jquery_in_wordpress.py +92 -0
  32. package/plugins/ima-claude/hooks/memory_bootstrap.py +79 -0
  33. package/plugins/ima-claude/hooks/memory_store_reminder.py +75 -0
  34. package/plugins/ima-claude/hooks/prompt_coach.py +125 -0
  35. package/plugins/ima-claude/hooks/prompt_coach_digest.md +48 -0
  36. package/plugins/ima-claude/hooks/prompt_coach_system.md +30 -0
  37. package/plugins/ima-claude/hooks/sequential_thinking_check.py +81 -0
  38. package/plugins/ima-claude/hooks/serena_over_grep.py +96 -0
  39. package/plugins/ima-claude/hooks/serena_over_read.py +66 -0
  40. package/plugins/ima-claude/hooks/serena_project_check.py +133 -0
  41. package/plugins/ima-claude/hooks/sql_injection_check.py +73 -0
  42. package/plugins/ima-claude/hooks/task_master_after_plan.py +31 -0
  43. package/plugins/ima-claude/hooks/task_master_before_impl.py +93 -0
  44. package/plugins/ima-claude/hooks/tavily_extract_advanced.py +48 -0
  45. package/plugins/ima-claude/hooks/vestige_before_external.py +86 -0
  46. package/plugins/ima-claude/hooks/webfetch_to_tavily.py +42 -0
  47. package/plugins/ima-claude/hooks/websearch_to_tavily.py +41 -0
  48. package/plugins/ima-claude/hooks/wp_security_check.py +150 -0
  49. package/plugins/ima-claude/personalities/README.md +45 -0
  50. package/plugins/ima-claude/personalities/enable-40k.md +69 -0
  51. package/plugins/ima-claude/personalities/enable-templars.md +69 -0
  52. package/plugins/ima-claude/skills/.research-summary.md +340 -0
  53. package/plugins/ima-claude/skills/architect/SKILL.md +304 -0
  54. package/plugins/ima-claude/skills/compound-bridge/SKILL.md +200 -0
  55. package/plugins/ima-claude/skills/discourse/SKILL.md +440 -0
  56. package/plugins/ima-claude/skills/discourse-admin/SKILL.md +192 -0
  57. package/plugins/ima-claude/skills/discourse-admin/references/api-endpoints.md +441 -0
  58. package/plugins/ima-claude/skills/discourse-admin/references/gotchas.md +107 -0
  59. package/plugins/ima-claude/skills/discourse-admin/references/staging-defaults.md +98 -0
  60. package/plugins/ima-claude/skills/discourse-admin/scripts/discourse-admin.py +319 -0
  61. package/plugins/ima-claude/skills/docs-organize/SKILL.md +254 -0
  62. package/plugins/ima-claude/skills/docs-organize/templates/active-README.md +50 -0
  63. package/plugins/ima-claude/skills/docs-organize/templates/archive-README.md +57 -0
  64. package/plugins/ima-claude/skills/docs-organize/templates/docs-README.md +43 -0
  65. package/plugins/ima-claude/skills/docs-organize/templates/phase-archive-README.md +83 -0
  66. package/plugins/ima-claude/skills/docs-organize/templates/section-README.md +48 -0
  67. package/plugins/ima-claude/skills/docs-organize/templates/transient-README.md +79 -0
  68. package/plugins/ima-claude/skills/docs-organize/templates/transient-gitignore +9 -0
  69. package/plugins/ima-claude/skills/ember-discourse/SKILL.md +496 -0
  70. package/plugins/ima-claude/skills/functional-programmer/SKILL.md +258 -0
  71. package/plugins/ima-claude/skills/ima-bootstrap/SKILL.md +278 -0
  72. package/plugins/ima-claude/skills/ima-bootstrap/references/bootstrap-patterns.md +356 -0
  73. package/plugins/ima-claude/skills/ima-bootstrap/references/ima-brand.md +273 -0
  74. package/plugins/ima-claude/skills/ima-bootstrap/references/theme-integration.md +212 -0
  75. package/plugins/ima-claude/skills/ima-brand/SKILL.md +108 -0
  76. package/plugins/ima-claude/skills/ima-brand/references/brand-identity.md +140 -0
  77. package/plugins/ima-claude/skills/ima-brand/references/digital-standards.md +180 -0
  78. package/plugins/ima-claude/skills/ima-brand/references/visual-system.md +173 -0
  79. package/plugins/ima-claude/skills/ima-forms-expert/SKILL.md +175 -0
  80. package/plugins/ima-claude/skills/ima-forms-expert/references/container-components.md +154 -0
  81. package/plugins/ima-claude/skills/ima-forms-expert/references/examples.md +328 -0
  82. package/plugins/ima-claude/skills/ima-forms-expert/references/field-components.md +298 -0
  83. package/plugins/ima-claude/skills/ima-forms-expert/references/form-factory.md +193 -0
  84. package/plugins/ima-claude/skills/ima-forms-expert/references/quick-reference.md +153 -0
  85. package/plugins/ima-claude/skills/ima-forms-expert/references/validation-engine.md +336 -0
  86. package/plugins/ima-claude/skills/jira-checkpoint/SKILL.md +178 -0
  87. package/plugins/ima-claude/skills/jquery/SKILL.md +413 -0
  88. package/plugins/ima-claude/skills/js-fp/SKILL.md +463 -0
  89. package/plugins/ima-claude/skills/js-fp/core-principles.md +487 -0
  90. package/plugins/ima-claude/skills/js-fp/examples/pure-functions.js +260 -0
  91. package/plugins/ima-claude/skills/js-fp/examples/tests/pure-functions.test.js +262 -0
  92. package/plugins/ima-claude/skills/js-fp/references/anti-patterns.md +120 -0
  93. package/plugins/ima-claude/skills/js-fp/references/performance-patterns.md +116 -0
  94. package/plugins/ima-claude/skills/js-fp/references/testing-patterns.md +134 -0
  95. package/plugins/ima-claude/skills/js-fp-api/SKILL.md +280 -0
  96. package/plugins/ima-claude/skills/js-fp-api/examples/crud-endpoint.js +258 -0
  97. package/plugins/ima-claude/skills/js-fp-api/references/middleware-patterns.md +134 -0
  98. package/plugins/ima-claude/skills/js-fp-api/references/security-sql.md +110 -0
  99. package/plugins/ima-claude/skills/js-fp-api/references/validation-patterns.md +165 -0
  100. package/plugins/ima-claude/skills/js-fp-react/SKILL.md +447 -0
  101. package/plugins/ima-claude/skills/js-fp-react/examples/ProductCard.tsx +65 -0
  102. package/plugins/ima-claude/skills/js-fp-react/references/hooks-advanced.md +136 -0
  103. package/plugins/ima-claude/skills/js-fp-react/references/performance-patterns.md +175 -0
  104. package/plugins/ima-claude/skills/js-fp-vue/SKILL.md +322 -0
  105. package/plugins/ima-claude/skills/js-fp-vue/references/complete-examples.md +397 -0
  106. package/plugins/ima-claude/skills/js-fp-vue/references/composables-advanced.md +282 -0
  107. package/plugins/ima-claude/skills/js-fp-vue/references/reactivity-patterns.md +348 -0
  108. package/plugins/ima-claude/skills/js-fp-vue/references/testing.md +314 -0
  109. package/plugins/ima-claude/skills/js-fp-wordpress/SKILL.md +301 -0
  110. package/plugins/ima-claude/skills/js-fp-wordpress/references/ajax-patterns.md +192 -0
  111. package/plugins/ima-claude/skills/js-fp-wordpress/references/event-patterns.md +136 -0
  112. package/plugins/ima-claude/skills/js-fp-wordpress/references/wp-integration.md +248 -0
  113. package/plugins/ima-claude/skills/livecanvas/SKILL.md +209 -0
  114. package/plugins/ima-claude/skills/livecanvas/references/livecanvas-features.md +311 -0
  115. package/plugins/ima-claude/skills/livecanvas/references/loops-and-logic.md +730 -0
  116. package/plugins/ima-claude/skills/livecanvas/references/picostrap.md +227 -0
  117. package/plugins/ima-claude/skills/mcp-atlassian/SKILL.md +339 -0
  118. package/plugins/ima-claude/skills/mcp-context7/SKILL.md +109 -0
  119. package/plugins/ima-claude/skills/mcp-memory/SKILL.md +182 -0
  120. package/plugins/ima-claude/skills/mcp-qdrant/SKILL.md +233 -0
  121. package/plugins/ima-claude/skills/mcp-sequential/SKILL.md +149 -0
  122. package/plugins/ima-claude/skills/mcp-serena/SKILL.md +174 -0
  123. package/plugins/ima-claude/skills/mcp-tavily/SKILL.md +118 -0
  124. package/plugins/ima-claude/skills/mcp-vestige/SKILL.md +259 -0
  125. package/plugins/ima-claude/skills/php-authnet/SKILL.md +275 -0
  126. package/plugins/ima-claude/skills/php-authnet/references/api-reference.md +624 -0
  127. package/plugins/ima-claude/skills/php-authnet/references/sandbox-testing.md +424 -0
  128. package/plugins/ima-claude/skills/php-fp/SKILL.md +333 -0
  129. package/plugins/ima-claude/skills/php-fp/examples/pure-functions.php +403 -0
  130. package/plugins/ima-claude/skills/php-fp/examples/tests/PureFunctionsTest.php +515 -0
  131. package/plugins/ima-claude/skills/php-fp/references/core-principles.md +277 -0
  132. package/plugins/ima-claude/skills/php-fp/references/testing-patterns.md +374 -0
  133. package/plugins/ima-claude/skills/php-fp-wordpress/SKILL.md +216 -0
  134. package/plugins/ima-claude/skills/php-fp-wordpress/references/fp-patterns.md +275 -0
  135. package/plugins/ima-claude/skills/php-fp-wordpress/references/plugin-architecture.md +295 -0
  136. package/plugins/ima-claude/skills/php-fp-wordpress/references/security-examples.md +203 -0
  137. package/plugins/ima-claude/skills/php-fp-wordpress/references/testing-strategy.md +259 -0
  138. package/plugins/ima-claude/skills/phpunit-wp/SKILL.md +716 -0
  139. package/plugins/ima-claude/skills/playwright/SKILL.md +434 -0
  140. package/plugins/ima-claude/skills/playwright/references/accessibility-testing.md +153 -0
  141. package/plugins/ima-claude/skills/playwright/references/ci-cd.md +268 -0
  142. package/plugins/ima-claude/skills/playwright/references/network-mocking.md +270 -0
  143. package/plugins/ima-claude/skills/playwright/references/visual-regression.md +215 -0
  144. package/plugins/ima-claude/skills/py-fp/SKILL.md +663 -0
  145. package/plugins/ima-claude/skills/py-fp/examples/pure-functions.py +185 -0
  146. package/plugins/ima-claude/skills/py-fp/examples/tests/test_pure_functions.py +244 -0
  147. package/plugins/ima-claude/skills/py-fp/references/core-principles.md +381 -0
  148. package/plugins/ima-claude/skills/py-fp/references/testing-patterns.md +283 -0
  149. package/plugins/ima-claude/skills/quasar-fp/SKILL.md +327 -0
  150. package/plugins/ima-claude/skills/quasar-fp/metadata.json +85 -0
  151. package/plugins/ima-claude/skills/quasar-fp/references/component-patterns.md +257 -0
  152. package/plugins/ima-claude/skills/quasar-fp/references/theme-integration.md +233 -0
  153. package/plugins/ima-claude/skills/quasar-fp/references/utility-classes.md +237 -0
  154. package/plugins/ima-claude/skills/quickstart/SKILL.md +129 -0
  155. package/plugins/ima-claude/skills/rails/SKILL.md +359 -0
  156. package/plugins/ima-claude/skills/resume-session/SKILL.md +68 -0
  157. package/plugins/ima-claude/skills/rg/SKILL.md +205 -0
  158. package/plugins/ima-claude/skills/ruby-fp/SKILL.md +336 -0
  159. package/plugins/ima-claude/skills/save-session/SKILL.md +81 -0
  160. package/plugins/ima-claude/skills/scorecard/SKILL.md +96 -0
  161. package/plugins/ima-claude/skills/skill-analyzer/SKILL.md +127 -0
  162. package/plugins/ima-claude/skills/skill-analyzer/references/advanced-checklist.md +44 -0
  163. package/plugins/ima-claude/skills/skill-analyzer/references/core-checklist.md +60 -0
  164. package/plugins/ima-claude/skills/skill-analyzer/scripts/analyze_skill.py +418 -0
  165. package/plugins/ima-claude/skills/skill-creator/LICENSE.txt +202 -0
  166. package/plugins/ima-claude/skills/skill-creator/SKILL.md +343 -0
  167. package/plugins/ima-claude/skills/skill-creator/references/output-patterns.md +82 -0
  168. package/plugins/ima-claude/skills/skill-creator/references/workflows.md +28 -0
  169. package/plugins/ima-claude/skills/skill-creator/scripts/init_skill.py +303 -0
  170. package/plugins/ima-claude/skills/skill-creator/scripts/package_skill.py +110 -0
  171. package/plugins/ima-claude/skills/skill-creator/scripts/quick_validate.py +103 -0
  172. package/plugins/ima-claude/skills/task-master/SKILL.md +51 -0
  173. package/plugins/ima-claude/skills/task-planner/SKILL.md +228 -0
  174. package/plugins/ima-claude/skills/task-runner/SKILL.md +192 -0
  175. package/plugins/ima-claude/skills/unit-testing/SKILL.md +198 -0
  176. package/plugins/ima-claude/skills/unit-testing/references/mock-patterns.md +181 -0
  177. package/plugins/ima-claude/skills/unit-testing/references/tdd-workflow.md +177 -0
  178. package/plugins/ima-claude/skills/unit-testing/references/test-strategy.md +126 -0
  179. package/plugins/ima-claude/skills/wp-local/SKILL.md +246 -0
  180. package/plugins/ima-claude/skills/wp-local/references/configuration.md +198 -0
  181. package/plugins/ima-claude/skills/wp-local/references/wp-cli-reference.md +406 -0
  182. package/plugins/ima-claude/skills/wp-local/scripts/wp-local.sh +61 -0
@@ -0,0 +1,730 @@
1
+ # Loops & Logic (Tangible) — Complete Reference
2
+
3
+ HTML-like templating language for WordPress dynamic content. Capitalized tags are dynamic (`<Loop>`, `<Field>`), lowercase are standard HTML.
4
+
5
+ **Docs**: https://docs.loopsandlogic.com/
6
+ **In LiveCanvas**: Wrap in `<tangible class="live-refresh">...</tangible>`
7
+
8
+ ## Table of Contents
9
+
10
+ 1. [Syntax Rules](#syntax-rules)
11
+ 2. [Loop Tag](#loop-tag)
12
+ 3. [Field Tag](#field-tag)
13
+ 4. [If/Else Conditions](#ifelse-conditions)
14
+ 5. [Set/Get Variables](#setget-variables)
15
+ 6. [Date Tag](#date-tag)
16
+ 7. [Format Tag](#format-tag)
17
+ 8. [Math Tag](#math-tag)
18
+ 9. [List and Map](#list-and-map)
19
+ 10. [ACF Integration](#acf-integration)
20
+ 11. [Template Tag](#template-tag)
21
+ 12. [Utility Tags](#utility-tags)
22
+ 13. [WooCommerce](#woocommerce)
23
+ 14. [All Dynamic Tags](#all-dynamic-tags)
24
+
25
+ ---
26
+
27
+ ## Syntax Rules
28
+
29
+ **Self-closed tags** (no inner content):
30
+ ```html
31
+ <Field title />
32
+ <Field name="title" />
33
+ ```
34
+
35
+ **Wrapping tags** (contain content):
36
+ ```html
37
+ <Loop type="post"><Field title /></Loop>
38
+ ```
39
+
40
+ **Attributes** — quotes optional for simple values:
41
+ ```html
42
+ <Loop type=post count=5 orderby=date>
43
+ <Date format="F j, Y" /> <!-- Quotes needed: spaces/special chars -->
44
+ ```
45
+
46
+ **Dynamic values in attributes** — use `{}`:
47
+ ```html
48
+ <a href="{Field url}"><Field title /></a>
49
+ <img src="{Field image_url}" alt="{Field title}" />
50
+ ```
51
+
52
+ ---
53
+
54
+ ## Loop Tag
55
+
56
+ ### Post Loop
57
+ ```html
58
+ <Loop type="post" count="5" orderby="date" order="desc">
59
+ <Field title />
60
+ </Loop>
61
+ ```
62
+
63
+ #### Query Parameters
64
+
65
+ **Post type & selection**:
66
+ | Param | Example | Notes |
67
+ |-------|---------|-------|
68
+ | `type` | `post`, `page`, `product` | Any post type slug |
69
+ | `id` | `42` | Specific post |
70
+ | `name` | `hello-world` | By slug |
71
+ | `include` | `"1,2,3"` | Specific IDs |
72
+ | `exclude` | `"4,5,6"` | Exclude IDs |
73
+ | `count` | `10` | Limit results |
74
+ | `offset` | `5` | Skip first N |
75
+ | `status` | `publish`, `draft` | Post status |
76
+ | `sticky` | `true`, `only`, `false` | Sticky post handling |
77
+
78
+ **Ordering**:
79
+ | `orderby` value | Description |
80
+ |-----------------|-------------|
81
+ | `date` | Publish date (default) |
82
+ | `modified` | Last modified |
83
+ | `title` | Alphabetical |
84
+ | `random` | Random order |
85
+ | `menu_order` | Menu/page order |
86
+ | `comment_count` | Most commented |
87
+ | `id` | By post ID |
88
+ | `name` | By slug |
89
+ | `author` | By author |
90
+ | `relevance` | With search queries |
91
+
92
+ `order`: `asc` or `desc`
93
+
94
+ **Author filtering**:
95
+ ```html
96
+ <Loop type=post author="5">
97
+ <Loop type=post author="admin"> <!-- By slug -->
98
+ <Loop type=post exclude_author="2">
99
+ ```
100
+
101
+ **Date filtering**:
102
+ ```html
103
+ <Loop type=post publish_compare="after" publish_date="2 weeks ago">
104
+ <Loop type=post publish_year="2024" publish_month="6">
105
+ ```
106
+ `publish_compare`: `before`, `after`, `on`, `not_on`
107
+
108
+ **Taxonomy filtering**:
109
+ ```html
110
+ <Loop type=post category="news">
111
+ <Loop type=post tag="featured">
112
+ <Loop type=post taxonomy="genre" terms="comedy,drama">
113
+ <Loop type=post taxonomy="color" terms="red" taxonomy_2="size" terms_2="large" taxonomy_relation="AND">
114
+ <Loop type=post exclude_category="uncategorized">
115
+ ```
116
+
117
+ **Custom field filtering**:
118
+ ```html
119
+ <Loop type=post custom_field="price" custom_field_value="100" custom_field_compare=">=" custom_field_type="numeric">
120
+ ```
121
+ - `custom_field_compare`: `=`, `!=`, `>`, `<`, `>=`, `<=`
122
+ - `custom_field_type`: `string`, `numeric`, `date`
123
+ - Up to 3 custom fields: `custom_field_2`, `custom_field_value_2`, etc.
124
+
125
+ **Custom date field filtering**:
126
+ ```html
127
+ <Loop type=post custom_date_field="event_date" custom_date_field_value="today" custom_date_field_compare="after" custom_date_field_format="Y-m-d">
128
+ ```
129
+
130
+ **Pagination**:
131
+ ```html
132
+ <Loop type=post paged="10"> <!-- AJAX pagination, 10 per page -->
133
+ <Loop type=post search="{Url query=s}"> <!-- Search integration -->
134
+ ```
135
+
136
+ ### Other Loop Types
137
+
138
+ **Taxonomy terms**:
139
+ ```html
140
+ <Loop type="taxonomy_term" taxonomy="category" hide_empty="true" orderby="name" parent="0">
141
+ <Field title /> (<Field count />)
142
+ </Loop>
143
+
144
+ <!-- Shortcut for current post's terms -->
145
+ <Taxonomy category>
146
+ <Term title />
147
+ </Taxonomy>
148
+ ```
149
+
150
+ **Users**:
151
+ ```html
152
+ <Loop type="user" role="author" orderby="display_name">
153
+ <Field full_name /> — <Field email />
154
+ </Loop>
155
+
156
+ <!-- Current user shortcut -->
157
+ <User full_name />
158
+ ```
159
+
160
+ **Attachments**:
161
+ ```html
162
+ <Loop type="attachment">
163
+ <Field url /> — <Field mime_type />
164
+ </Loop>
165
+ ```
166
+
167
+ **Menus**:
168
+ ```html
169
+ <Loop type="menu" name="primary">
170
+ <a href="{Field url}"><Field title /></a>
171
+ </Loop>
172
+ ```
173
+
174
+ **Data structures**:
175
+ ```html
176
+ <Loop times="5">Item <Field count /></Loop>
177
+ <Loop items="red,green,blue"><Field /></Loop>
178
+ <Loop list="my_list"><Field /></Loop>
179
+ <Loop map="my_map"><Field key /> = <Field value /></Loop>
180
+ ```
181
+
182
+ ### Loop Position Helpers
183
+
184
+ Inside any loop:
185
+ ```html
186
+ <Field count /> <!-- Current iteration (1-based) -->
187
+ <Field total /> <!-- Total items -->
188
+ <If first>First item</If>
189
+ <If last>Last item</If>
190
+ <If not last>, </If> <!-- Comma-separated list -->
191
+ ```
192
+
193
+ ---
194
+
195
+ ## Field Tag
196
+
197
+ ```html
198
+ <!-- Post fields -->
199
+ <Field title />
200
+ <Field content />
201
+ <Field excerpt />
202
+ <Field id />
203
+ <Field name /> <!-- Slug -->
204
+ <Field url /> <!-- Permalink -->
205
+ <Field edit_url />
206
+ <Field publish_date />
207
+ <Field modified_date />
208
+ <Field status />
209
+ <Field author /> <!-- Author ID -->
210
+ <Field author_full_name />
211
+ <Field author_url />
212
+ <Field image /> <!-- Featured image as <img> -->
213
+ <Field image_url />
214
+ <Field image_url size="thumbnail" />
215
+ <Field image_srcset />
216
+ <Field image_alt />
217
+
218
+ <!-- Hierarchical -->
219
+ <Field parent />
220
+ <Field parent_title />
221
+ <Field children_ids />
222
+ <Field ancestors />
223
+
224
+ <!-- From specific post -->
225
+ <Field title type="page" name="about" />
226
+ <Field title type="post" id="42" />
227
+
228
+ <!-- Date formatting shortcut -->
229
+ <Field publish_date date_format="F j, Y" />
230
+
231
+ <!-- String operations shortcut -->
232
+ <Field phone replace=" " with="-" />
233
+
234
+ <!-- All custom fields (debugging) -->
235
+ <Field all />
236
+ ```
237
+
238
+ ---
239
+
240
+ ## If/Else Conditions
241
+
242
+ ### Basic Structure
243
+ ```html
244
+ <If field="image" exists>
245
+ Has image
246
+ <Else />
247
+ No image
248
+ </If>
249
+
250
+ <If field="color" is value="red">
251
+ Red
252
+ <Else if field="color" is value="blue" />
253
+ Blue
254
+ <Else />
255
+ Other
256
+ </If>
257
+ ```
258
+
259
+ ### Subjects
260
+
261
+ | Subject | Example |
262
+ |---------|---------|
263
+ | `field="name"` | `<If field="price" more_than value="100">` |
264
+ | `check="..."` | `<If check="{Get var}" is value="abc">` |
265
+ | `count` | `<If count more_than value="2">` |
266
+ | `total` | `<If total more_than value="5">` |
267
+ | `first` / `last` | `<If first>` |
268
+ | `loop` | `<If loop exists type="post" category="news">` |
269
+ | `user` | `<If user exists>` (logged in) |
270
+ | `user_role` | `<If user_role includes value="administrator">` |
271
+ | `user_field="name"` | `<If user_field="email" value="test@test.com">` |
272
+ | `route="..."` | `<If route="product/" exists>` |
273
+ | `singular` | `<If singular type="product">` |
274
+ | `acf_true_false` | `<If acf_true_false="field_name">` |
275
+ | `acf_date` | `<If acf_date="start_date" after="today">` |
276
+
277
+ ### Comparisons
278
+
279
+ | Operator | Description |
280
+ |----------|-------------|
281
+ | `exists` | Not empty (default when no value) |
282
+ | `not_exists` | Is empty |
283
+ | `is` | Exact match (default when value given) |
284
+ | `is_not` | Does not match |
285
+ | `starts_with` | Begins with |
286
+ | `ends_with` | Ends with |
287
+ | `includes` | Contains |
288
+ | `not_includes` | Does not contain |
289
+ | `more_than` | Greater than |
290
+ | `more_than_or_equal` | >= |
291
+ | `less_than` | Less than |
292
+ | `less_than_or_equal` | <= |
293
+ | `matches_pattern` | Regex match |
294
+ | `before` / `after` | Date comparison |
295
+ | `before_inclusive` / `after_inclusive` | Date comparison (inclusive) |
296
+
297
+ ### Logic Variables (AND/OR)
298
+ ```html
299
+ <!-- AND: all must be true -->
300
+ <Set logic="both" all="true">
301
+ <If field="price" more_than value="100">true<Else />false</If>
302
+ <If field="stock" exists>true<Else />false</If>
303
+ </Set>
304
+ <If logic="both">Both conditions met</If>
305
+
306
+ <!-- OR: any true -->
307
+ <Set logic="either" any="true">
308
+ <If field="color" is value="red">true<Else />false</If>
309
+ <If field="color" is value="blue">true<Else />false</If>
310
+ </Set>
311
+ ```
312
+
313
+ ### Switch/When
314
+ ```html
315
+ <Switch field="status" is>
316
+ <When value="active" />Active
317
+ <When value="pending" />Pending
318
+ <When value="closed" />Closed
319
+ <When />Unknown
320
+ </Switch>
321
+ ```
322
+
323
+ ---
324
+
325
+ ## Set/Get Variables
326
+
327
+ ```html
328
+ <Set name="my_var"><Field title /></Set>
329
+ <Get name="my_var" />
330
+
331
+ <!-- Shorthand -->
332
+ <Set my_var><Field title /></Set>
333
+ <Get my_var />
334
+ ```
335
+
336
+ ### Variable Types
337
+
338
+ | Type | Set | Get | Scope |
339
+ |------|-----|-----|-------|
340
+ | Regular | `<Set name="x">` | `<Get name="x" />` | Page |
341
+ | Local | `<Set local="x">` | `<Get local="x" />` | Template only |
342
+ | Template | `<Set template="x">` | `<Get template="x" />` | Reusable fragment |
343
+ | Math | `<Set math="x">0</Set>` | `<Get math="x" />` | Math operations |
344
+ | Logic | `<Set logic="x">` | `<If logic="x">` | Boolean compound |
345
+ | Loop | `<Set loop="x">` | `<Get loop="x" />` | Stored loop |
346
+ | Query | `<Set query="x">` | `<Loop query="x">` | Stored query |
347
+ | JS | `<Set js="x">` | N/A (Script tab) | Pass to JavaScript |
348
+ | Sass | `<Set sass="x">` | N/A (Style tab) | Pass to SCSS |
349
+
350
+ ### Template Variables (Reusable Fragments)
351
+ ```html
352
+ <Set template="card">
353
+ <div class="card h-100">
354
+ <h5 class="card-title"><Field title /></h5>
355
+ <p><Field excerpt /></p>
356
+ </div>
357
+ </Set>
358
+
359
+ <Loop type="post" count="5">
360
+ <Get template="card" />
361
+ </Loop>
362
+ ```
363
+
364
+ ### Passing Variables to Templates
365
+ ```html
366
+ <Template name="my-template" color="red" size="large" />
367
+ <!-- Inside template: -->
368
+ <Get local="color" /> <!-- red -->
369
+ ```
370
+
371
+ ---
372
+
373
+ ## Date Tag
374
+
375
+ ```html
376
+ <Date /> <!-- Admin format -->
377
+ <Date format="Y-m-d" /> <!-- 2024-07-18 -->
378
+ <Date format="F j, Y" /> <!-- July 18, 2024 -->
379
+ <Date format="timestamp" /> <!-- UNIX timestamp -->
380
+ <Date format="ago" /> <!-- "3 days ago" -->
381
+
382
+ <!-- Arithmetic -->
383
+ <Date add="1 week" />
384
+ <Date subtract="3 days" format="Y-m-d" />
385
+ <Date add="1 month">2024-01-15</Date>
386
+
387
+ <!-- From field -->
388
+ <Date format="F j, Y"><Field publish_date /></Date>
389
+
390
+ <!-- Parse non-standard format -->
391
+ <Date from_format="d/m/Y">25/12/2024</Date>
392
+
393
+ <!-- Locale -->
394
+ <Date format="l j F Y" locale="fr" />
395
+ ```
396
+
397
+ **PHP format codes**: `Y` (year), `m` (month 01-12), `d` (day 01-31), `H` (hour 24h), `i` (min), `s` (sec), `F` (month name), `M` (short month), `j` (day no zero), `g` (hour 12h), `a` (am/pm), `l` (day name), `D` (short day), `U` (timestamp)
398
+
399
+ ---
400
+
401
+ ## Format Tag
402
+
403
+ ```html
404
+ <!-- Case -->
405
+ <Format case="upper">hello</Format> <!-- HELLO -->
406
+ <Format case="lower">HELLO</Format> <!-- hello -->
407
+ <Format case="capital">hello world</Format> <!-- Hello world -->
408
+ <Format case="capital_words">hello world</Format> <!-- Hello World -->
409
+
410
+ <!-- Truncate -->
411
+ <Format length="100"><Field content /></Format>
412
+ <Format words="20"><Field content /></Format>
413
+
414
+ <!-- Replace -->
415
+ <Format replace=" " with="-">hello world</Format>
416
+ <Format replace_pattern="/(\d{3})(\d{4})/" with="$1-$2">1234567</Format>
417
+
418
+ <!-- Prefix/Suffix -->
419
+ <Format prefix="color-">blue</Format>
420
+ <Format suffix="-mode">dark</Format>
421
+
422
+ <!-- Split/Join -->
423
+ <Format split=",">red,green,blue</Format>
424
+ <Format join=", ">["red","green","blue"]</Format>
425
+
426
+ <!-- Trim -->
427
+ <Format trim> hello </Format>
428
+ ```
429
+
430
+ ---
431
+
432
+ ## Math Tag
433
+
434
+ ```html
435
+ <Math>5 + 3</Math> <!-- 8 -->
436
+ <Math><Field price /> * 1.1</Math> <!-- price + 10% -->
437
+
438
+ <!-- Accumulator pattern -->
439
+ <Set math="total">0</Set>
440
+ <Loop type="post" post_type="product">
441
+ <Math>total = total + <Field custom_field="price" /></Math>
442
+ </Loop>
443
+ Total: $<Get math="total" />
444
+ ```
445
+
446
+ Operators: `+`, `-`, `*`, `/`, parentheses
447
+
448
+ ---
449
+
450
+ ## List and Map
451
+
452
+ ### List
453
+ ```html
454
+ <List name="colors">
455
+ <Item>Red</Item>
456
+ <Item>Green</Item>
457
+ <Item>Blue</Item>
458
+ </List>
459
+
460
+ <Loop list="colors"><Field /></Loop>
461
+
462
+ <!-- Quick inline -->
463
+ <Loop items="red,green,blue"><Field /></Loop>
464
+
465
+ <!-- Access by index (1-based) -->
466
+ <Field list="colors" item="1" /> <!-- Red -->
467
+ ```
468
+
469
+ ### Map
470
+ ```html
471
+ <Map name="config">
472
+ <Key primary_color>#ff0000</Key>
473
+ <Key site_name>My Site</Key>
474
+ </Map>
475
+
476
+ <Field map="config" key="primary_color" />
477
+
478
+ <Loop map_keys="config">
479
+ <Field key /> = <Field value />
480
+ </Loop>
481
+ ```
482
+
483
+ ---
484
+
485
+ ## ACF Integration
486
+
487
+ ### Simple Fields
488
+ ```html
489
+ <Field acf_text="field_name" />
490
+ <Field acf_textarea="field_name" />
491
+ <Field acf_editor="field_name" /> <!-- WYSIWYG -->
492
+ <Field acf_email="field_name" />
493
+ <Field acf_url="field_name" />
494
+ <Field acf_number="field_name" />
495
+ ```
496
+
497
+ ### Image
498
+ ```html
499
+ <Field acf_image="hero" field="url" />
500
+ <Loop acf_image="hero">
501
+ <img src="{Field url}" srcset="{Field srcset}" alt="{Field alt}" />
502
+ </Loop>
503
+ ```
504
+
505
+ ### Gallery
506
+ ```html
507
+ <Loop acf_gallery="photos">
508
+ <img src="{Field url}" alt="{Field alt}" />
509
+ </Loop>
510
+ ```
511
+
512
+ ### File
513
+ ```html
514
+ <a href="{Field acf_file=download field=url}">Download</a>
515
+ ```
516
+
517
+ ### Link
518
+ ```html
519
+ <Loop acf_link="cta_link">
520
+ <a href="{Field url}" target="{Field target}"><Field title /></a>
521
+ </Loop>
522
+ ```
523
+
524
+ ### Date/Time
525
+ ```html
526
+ <Field acf_date="event_date" />
527
+ <Field acf_date="event_date" format="l j F Y" />
528
+ <Field acf_date_time="start" />
529
+ <Field acf_time="doors_open" />
530
+ ```
531
+
532
+ ### Choice Fields
533
+ ```html
534
+ <Field acf_select="color" />
535
+ <Field acf_radio="size" />
536
+
537
+ <!-- Multiple select / Checkbox -->
538
+ <Loop acf_select="colors"><Field /></Loop>
539
+ <Loop acf_checkbox="options"><Field /></Loop>
540
+
541
+ <!-- Label (when return format is value) -->
542
+ <Field acf_select="color" field="label" />
543
+ ```
544
+
545
+ ### True/False
546
+ ```html
547
+ <If acf_true_false="show_section">
548
+ Section content
549
+ </If>
550
+ ```
551
+
552
+ ### Relational
553
+ ```html
554
+ <Loop acf_post="related_post"><Field title /></Loop>
555
+ <Loop acf_relationship="related"><Field title /></Loop>
556
+ <Loop acf_taxonomy="categories"><Field title /></Loop>
557
+ ```
558
+
559
+ ### Repeater
560
+ ```html
561
+ <Loop acf_repeater="team_members">
562
+ <Field name />
563
+ <Field role />
564
+ <img src="{Field acf_image=photo field=url}" />
565
+ </Loop>
566
+ ```
567
+
568
+ ### Group
569
+ ```html
570
+ <Loop acf_group="address">
571
+ <Field street />, <Field city />, <Field state />
572
+ </Loop>
573
+ ```
574
+
575
+ ### Flexible Content
576
+ ```html
577
+ <Loop acf_flexible="page_sections">
578
+ <If field="layout" value="hero">
579
+ <Field acf_editor="content" />
580
+ <Else if field="layout" value="gallery" />
581
+ <Loop acf_gallery="images">
582
+ <img src="{Field url}" />
583
+ </Loop>
584
+ <Else if field="layout" value="cta" />
585
+ <a href="{Field acf_url=link}"><Field acf_text=label /></a>
586
+ </If>
587
+ </Loop>
588
+ ```
589
+
590
+ ### Google Map
591
+ ```html
592
+ <Loop acf_google_map="location">
593
+ <Field address /> (lat: <Field lat />, lng: <Field lng />)
594
+ </Loop>
595
+ ```
596
+
597
+ ---
598
+
599
+ ## Template Tag
600
+
601
+ ```html
602
+ <!-- By name or ID -->
603
+ <Template name="card-template" />
604
+ <Template id="74" />
605
+
606
+ <!-- Pass variables -->
607
+ <Template name="card" color="red" size="large" />
608
+
609
+ <!-- Theme template parts -->
610
+ <Template theme="sidebar" />
611
+ <Template theme="part" name="template-parts/footer" />
612
+
613
+ <!-- Shortcode equivalent -->
614
+ [template name="my-template"]
615
+ ```
616
+
617
+ ---
618
+
619
+ ## Utility Tags
620
+
621
+ ```html
622
+ <!-- Site info -->
623
+ <Site name /> <Site url /> <Site description />
624
+
625
+ <!-- URLs -->
626
+ <Url site /> <Url current /> <Url query="param" />
627
+
628
+ <!-- Paths -->
629
+ <Path uploads /> <Path theme />
630
+
631
+ <!-- Settings -->
632
+ <Setting timezone_string /> <Setting date_format />
633
+
634
+ <!-- WordPress shortcode -->
635
+ <Shortcode contact-form-7 id="123" title="Contact" />
636
+
637
+ <!-- Comments (not rendered) -->
638
+ <Note>Dev note: this won't appear</Note>
639
+
640
+ <!-- Raw output (skip L&L processing) -->
641
+ <Raw><Loop> would not be processed</Raw>
642
+
643
+ <!-- Redirect -->
644
+ <Redirect url="/login" />
645
+
646
+ <!-- Route segments -->
647
+ <Route /> <Route part="1" /> <Route part="-1" />
648
+
649
+ <!-- Embed -->
650
+ <Embed url="https://youtube.com/watch?v=..." />
651
+
652
+ <!-- Mobile detect -->
653
+ <If mobile_detect="phone">Mobile<Else />Desktop</If>
654
+
655
+ <!-- Async loading -->
656
+ <Async>Heavy content loaded async</Async>
657
+
658
+ <!-- Caching -->
659
+ <Cache name="sidebar" expire="1 hour">Expensive content</Cache>
660
+
661
+ <!-- Random -->
662
+ <Random />
663
+
664
+ <!-- Exit / Catch -->
665
+ <Catch exit>
666
+ <If field="status" is value="disabled"><Exit>Disabled</Exit></If>
667
+ Normal content
668
+ </Catch>
669
+ ```
670
+
671
+ ---
672
+
673
+ ## WooCommerce
674
+
675
+ Products are `product` post type — query like any CPT:
676
+
677
+ ```html
678
+ <Loop type="product" taxonomy="product_cat" terms="shirts" count="6">
679
+ <Field title />
680
+ <img src="{Field image_url}" />
681
+ <a href="{Field url}">View</a>
682
+ </Loop>
683
+ ```
684
+
685
+ **Product attributes** (stored as `pa_` taxonomies):
686
+ ```html
687
+ <Loop type="taxonomy_term" taxonomy="pa_color" post="current">
688
+ <Field title />
689
+ </Loop>
690
+ ```
691
+
692
+ **L&L Pro** adds dedicated WooCommerce loop types: `woo_product`, `woo_cart`, `woo_order`, `woo_order_item`, `woo_coupon`, `woo_subscription`, `woo_product_variation`, `woo_product_review`, etc.
693
+
694
+ ---
695
+
696
+ ## All Dynamic Tags
697
+
698
+ | Tag | Type | Purpose |
699
+ |-----|------|---------|
700
+ | `Loop` | Wrapping | Query & iterate |
701
+ | `Field` | Self-closed | Display field value |
702
+ | `If` | Wrapping | Conditional |
703
+ | `Set` | Wrapping | Store variable |
704
+ | `Get` | Self-closed | Retrieve variable |
705
+ | `Date` | Both | Date formatting |
706
+ | `Format` | Wrapping | String operations |
707
+ | `List` | Wrapping | Array creation |
708
+ | `Map` | Wrapping | Associative array |
709
+ | `Template` | Self-closed | Render saved template |
710
+ | `Shortcode` | Self-closed | WP shortcode |
711
+ | `Taxonomy` | Wrapping | Term loop shortcut |
712
+ | `Term` | Self-closed | Current term field |
713
+ | `User` | Self-closed | Current user field |
714
+ | `Url` | Self-closed | URL values |
715
+ | `Path` | Self-closed | File paths |
716
+ | `Site` | Self-closed | Site info |
717
+ | `Setting` | Self-closed | WP settings |
718
+ | `Embed` | Self-closed | Media embed |
719
+ | `Route` | Both | URL routing |
720
+ | `Redirect` | Self-closed | User redirect |
721
+ | `Note` | Wrapping | Comment |
722
+ | `Raw` | Wrapping | Skip processing |
723
+ | `Random` | Self-closed | Random values |
724
+ | `Exit` | Self-closed | Stop rendering |
725
+ | `Catch` | Wrapping | Catch Exit output |
726
+ | `Switch` | Wrapping | Multi-branch |
727
+ | `When` | Self-closed | Switch branch |
728
+ | `Math` | Both | Arithmetic (module) |
729
+ | `Async` | Wrapping | Async loading (module) |
730
+ | `Cache` | Wrapping | Caching (module) |