| 1 |
<div id="abj404-engine-profiles-section"> |
| 2 |
|
| 3 |
<p>{By default, when a visitor hits a 404 URL, all suggestion methods run: slug matching, spelling correction, title matching, content search, category/tag matching, URL fixing, and archive fallback. Engine Profiles let you override this for specific sections of your site — choose exactly which methods run when a 404 URL falls within a URL pattern you define.}</p> |
| 4 |
|
| 5 |
<p><strong>{Example 1:}</strong> {Your store lives at /products/. Spelling correction works great on blog posts, but on a product section you want only exact slug matching and URL fixing — fuzzy spelling suggestions might point to the wrong product. Create a profile with the URL pattern /products/* and check only "Slug Matching" and "URL Fix".}</p> |
| 6 |
|
| 7 |
<p><strong>{Example 2:}</strong> {You have a documentation archive at /docs/ that you recently restructured. The content is too technical for spelling suggestions to be useful, so you enable only the Archive Fallback engine there.}</p> |
| 8 |
|
| 9 |
<p><strong>{How profiles are applied:}</strong></p> |
| 10 |
<ul style="list-style: disc; margin-left: 1.5em;"> |
| 11 |
<li>{Each profile has a URL pattern (e.g. /products/*) that is tested against the incoming 404 URL.}</li> |
| 12 |
<li>{Profiles are checked in priority order — lower number means checked first.}</li> |
| 13 |
<li>{The first profile whose URL pattern matches the 404 URL wins. Only the engines you selected in that profile will run.}</li> |
| 14 |
<li>{If none of your profiles match the 404 URL, the default behavior applies: all engines run.}</li> |
| 15 |
</ul> |
| 16 |
|
| 17 |
<p>{Most sites do not need Engine Profiles. They are for advanced scenarios where one section of your site needs different suggestion logic than the rest.}</p> |
| 18 |
|
| 19 |
<div id="abj404-engine-profiles-list-wrap"> |
| 20 |
<table id="abj404-engine-profiles-table" class="widefat striped" style="margin-bottom: 12px;"> |
| 21 |
<thead> |
| 22 |
<tr> |
| 23 |
<th>{Name}</th> |
| 24 |
<th>{URL Pattern}</th> |
| 25 |
<th>{Regex}</th> |
| 26 |
<th>{Engines}</th> |
| 27 |
<th>{Priority}</th> |
| 28 |
<th>{Active}</th> |
| 29 |
<th>{Actions}</th> |
| 30 |
</tr> |
| 31 |
</thead> |
| 32 |
<tbody id="abj404-engine-profiles-tbody"> |
| 33 |
<tr id="abj404-engine-profiles-empty-row"> |
| 34 |
<td colspan="7">{No engine profiles defined.}</td> |
| 35 |
</tr> |
| 36 |
</tbody> |
| 37 |
</table> |
| 38 |
</div> |
| 39 |
|
| 40 |
<button type="button" id="abj404-add-engine-profile-btn" class="button button-primary"> |
| 41 |
{Add Engine Profile} |
| 42 |
</button> |
| 43 |
|
| 44 |
<div id="abj404-engine-profile-form-wrap" style="display:none; margin-top: 12px; padding: 12px; border: 1px solid #c3c4c7; background: #f9f9f9;"> |
| 45 |
<h4 id="abj404-engine-profile-form-title">{Add Engine Profile}</h4> |
| 46 |
|
| 47 |
<input type="hidden" id="abj404-profile-id" value="0"> |
| 48 |
|
| 49 |
<table class="form-table"> |
| 50 |
<tr> |
| 51 |
<th scope="row"><label for="abj404-profile-name">{Name}:</label></th> |
| 52 |
<td><input type="text" id="abj404-profile-name" class="regular-text" placeholder="{e.g. Products section}"></td> |
| 53 |
</tr> |
| 54 |
<tr> |
| 55 |
<th scope="row"><label for="abj404-profile-pattern">{URL Pattern}:</label></th> |
| 56 |
<td> |
| 57 |
<input type="text" id="abj404-profile-pattern" class="regular-text" placeholder="{e.g. /products/* or ^/products/}"> |
| 58 |
<p class="description">{Use * as wildcard for simple patterns. Check "Regex" for full regex patterns.}</p> |
| 59 |
</td> |
| 60 |
</tr> |
| 61 |
<tr> |
| 62 |
<th scope="row"><label for="abj404-profile-is-regex">{Regex}:</label></th> |
| 63 |
<td> |
| 64 |
<input type="checkbox" id="abj404-profile-is-regex" value="1"> |
| 65 |
<label for="abj404-profile-is-regex">{Pattern is a regular expression}</label> |
| 66 |
</td> |
| 67 |
</tr> |
| 68 |
<tr> |
| 69 |
<th scope="row">{Enabled Engines}:</th> |
| 70 |
<td id="abj404-profile-engines-checkboxes"> |
| 71 |
<p class="description">{Select which engines should run for URLs matching this profile. Leave all unchecked to run all engines.}</p> |
| 72 |
<label><input type="checkbox" class="abj404-engine-cb" value="ABJ_404_Solution_SlugMatchingEngine"> {Slug Matching}</label><br> |
| 73 |
<label><input type="checkbox" class="abj404-engine-cb" value="ABJ_404_Solution_SpellingMatchingEngine"> {Spelling Matching}</label><br> |
| 74 |
<label><input type="checkbox" class="abj404-engine-cb" value="ABJ_404_Solution_TitleMatchingEngine"> {Title Matching}</label><br> |
| 75 |
<label><input type="checkbox" class="abj404-engine-cb" value="ABJ_404_Solution_ContentMatchingEngine"> {Content Matching}</label><br> |
| 76 |
<label><input type="checkbox" class="abj404-engine-cb" value="ABJ_404_Solution_CategoryTagMatchingEngine"> {Category/Tag Matching}</label><br> |
| 77 |
<label><input type="checkbox" class="abj404-engine-cb" value="ABJ_404_Solution_UrlFixEngine"> {URL Fix}</label><br> |
| 78 |
<label><input type="checkbox" class="abj404-engine-cb" value="ABJ_404_Solution_ArchiveFallbackEngine"> {Archive Fallback}</label><br> |
| 79 |
<label><input type="checkbox" class="abj404-engine-cb" value="ABJ_404_Solution_WordPressUrlGuessEngine"> {WordPress URL Guess Fallback}</label> |
| 80 |
</td> |
| 81 |
</tr> |
| 82 |
<tr> |
| 83 |
<th scope="row"><label for="abj404-profile-priority">{Priority}:</label></th> |
| 84 |
<td> |
| 85 |
<input type="number" id="abj404-profile-priority" value="0" min="0" max="9999" style="width: 70px;"> |
| 86 |
<p class="description">{Lower number = higher priority. First matching profile wins.}</p> |
| 87 |
</td> |
| 88 |
</tr> |
| 89 |
<tr> |
| 90 |
<th scope="row"><label for="abj404-profile-status">{Active}:</label></th> |
| 91 |
<td> |
| 92 |
<input type="checkbox" id="abj404-profile-status" value="1" checked> |
| 93 |
<label for="abj404-profile-status">{Profile is active}</label> |
| 94 |
</td> |
| 95 |
</tr> |
| 96 |
</table> |
| 97 |
|
| 98 |
<button type="button" id="abj404-save-engine-profile-btn" class="button button-primary">{Save Profile}</button> |
| 99 |
<button type="button" id="abj404-cancel-engine-profile-btn" class="button">{Cancel}</button> |
| 100 |
<span id="abj404-engine-profile-save-msg" style="display:none; margin-left: 8px;"></span> |
| 101 |
</div> |
| 102 |
|
| 103 |
</div><!-- end abj404-engine-profiles-section --> |
| 104 |
|