| 1 |
=== Timed Content === |
| 2 |
|
| 3 |
Contributors: kjvtough, awelzel |
| 4 |
Tags: marketing, marketing tool, post, page, date, time, timer, timed, show, hide, content, schedule, display |
| 5 |
Requires at least: 3.8 |
| 6 |
Tested up to: 5.0 |
| 7 |
Stable tag: 2.50 |
| 8 |
License: GPL2 |
| 9 |
|
| 10 |
Plugin to show or hide portions of a Page or Post based on specific date/time characteristics. |
| 11 |
|
| 12 |
== Description == |
| 13 |
|
| 14 |
The Timed Content plugin allows users to specify that a portion of a Page or Post should appear/be visible or disappear/be invisible based on given time characteristics. You can also make portions of a Post or Page be visible at certain dates and times; you can even set up a schedule! |
| 15 |
|
| 16 |
The plugin adds the following: |
| 17 |
|
| 18 |
* A "client-side" shortcode that allows the marking of content to appear or disappear after a given time interval; a "fade" effect is included. This functionality is intended to be used for special effects only, as content marked in this manner is still visible in the HTML source and, therefore, not a secure method of hiding content. |
| 19 |
* Two "server-side" shortcodes that allow the marking of content to be visible only during specified date/time intervals. This functionality **can** be used as a secure method of hiding content, because the marked content will be included in the Page/Post **only** when viewed in the specified date/time intervals. |
| 20 |
|
| 21 |
A TinyMCE dialog is included to help users build the shortcodes. See the Screenshots tab for more info. |
| 22 |
|
| 23 |
== Installation == |
| 24 |
|
| 25 |
1. Extract the contents of the package to the `/wp-content/plugins/timed-content` directory |
| 26 |
2. Activate the plugin through the 'Plugins' menu in WordPress |
| 27 |
|
| 28 |
== Frequently Asked Questions == |
| 29 |
|
| 30 |
= Old rules after updating to version 2.50 = |
| 31 |
|
| 32 |
In versions prior to 2.50 the date/time format was not handled very well which caused quite some confusion. Therefore version 2.50 now uses a fixed format similar to ISO 8601: yyyy-mm-dd HH:MM |
| 33 |
|
| 34 |
Existing shortcodes and rules containing dates in the format mm/dd/yyyy should still work, but when editing rules the date value is converted to the new format. |
| 35 |
|
| 36 |
To be sure, you should check your existing rules and shortcodes if you upgraded from a version below 2.50. |
| 37 |
|
| 38 |
= Using Timed Content in Gutenberg = |
| 39 |
|
| 40 |
If you want to use Timed Content with Gutenberg you have to add a "Classic" block. There is no way to show or hide other content blocks with Timed Content. |
| 41 |
|
| 42 |
== Screenshots == |
| 43 |
|
| 44 |
1. An example showing use of the `[timed-content-client]` shortcode. The "alarm clock" button on the editor menubar brings up a dialog box to help build the Timed Content shortcodes. All of the Admin-side screenshots are from Wordpress 3.7, but the functionality is the same for 3.8. |
| 45 |
2. The "Add Timed Content shortcode" dialog showing the Client tab. Check the attribute you want to add and fill in the textboxes. |
| 46 |
3. The "Add Timed Content shortcode" dialog showing the Server tab. Check the attribute you want to add, then click on the Date and Time textboxes. |
| 47 |
4. The date and time pickers help you format a correct date and time. Here's the jQuery UI Datepicker in action. |
| 48 |
5. The "Add Timed Content shortcode" dialog showing the Timed Content Rules tab. |
| 49 |
|
| 50 |
== Changelog == |
| 51 |
|
| 52 |
= 2.50 = |
| 53 |
|
| 54 |
* Major code refactoring and cleanup - please check your existing rules and shortcodes if they still work as expected and change them if needed! |
| 55 |
* Increased minimum required WordPress version to 3.8 |
| 56 |
* Date format for new shortcodes and rules is now always "yyyy-mm-dd HH:MM" (similar to ISO 8601) |
| 57 |
* Existing dates in rules and shortcodes will be parsed as "mm/dd/yyyy HH:MM" if they contain slashes |
| 58 |
* Time values containing "AM" or "PM" will still work but converted to 24h format internally |
| 59 |
|
| 60 |
= 2.15 = |
| 61 |
|
| 62 |
* Fixed 404 error caused by wrong URL for jquery date/time picker localization. |
| 63 |
|
| 64 |
= 2.10 = |
| 65 |
|
| 66 |
* Fixed a problem with unexpected `p` elements inside server side timed content sections. |
| 67 |
|
| 68 |
= 2.9 = |
| 69 |
|
| 70 |
* Changed default sort order of the rules in the backend to the title. |
| 71 |
|
| 72 |
= 2.8 = |
| 73 |
|
| 74 |
* Added debug parameter `tctest`. |
| 75 |
|
| 76 |
= 2.7 = |
| 77 |
|
| 78 |
* Fixed deprecated class constructors. |
| 79 |
|
| 80 |
= 2.6 = |
| 81 |
|
| 82 |
* New action hooks. |
| 83 |
* `[timed-content-rule]` shortcode now accepts a Timed Content Rule name as well as an ID. |
| 84 |
* Streamlined i18n for date/time pickers (Use values available in Wordpress settings and `$wp_locale` when available, combined *-i18n.js files into one). |
| 85 |
* Some developer docs in the `readme.txt` |
| 86 |
|
| 87 |
= 2.5.1 = |
| 88 |
|
| 89 |
* Fixed `current_time()` bug in __rulesShowHTML() introduced in 2.5. |
| 90 |
|
| 91 |
= 2.5 = |
| 92 |
|
| 93 |
* Removed dependency on jQuery UI Dialog; now uses Thickbox. |
| 94 |
* Added and modified `fix_date_i18n()` from https://core.trac.wordpress.org/ticket/25768 to better handle DST and timezones with i18n. |
| 95 |
* Added custom filter `timed_content_filter_override` so admins can modify/replace `timed_content_filter` if necessary. |
| 96 |
* Using built-in spinner image now instead of `wpspin.gif` |
| 97 |
|
| 98 |
= 2.4 = |
| 99 |
|
| 100 |
* Removed `timed-content-admin-tinymce.js` (No need anymore; required JS variables now hooked directly into editor). Fixes incompatibility with OptimizePress. |
| 101 |
|
| 102 |
= 2.3.1 = |
| 103 |
|
| 104 |
* Fixed minor bugs related to Exception Dates. |
| 105 |
* Optimized rule periods arrays (array only needs 'status' and 'time' when it's meant to be human-readable). |
| 106 |
* Added custom filter `timed_content_filter` to emulate `apply_filter( 'the_content', ... )` functionality for content. |
| 107 |
|
| 108 |
= 2.3 = |
| 109 |
|
| 110 |
* Fixed bug when setting up weekly recurrence for Timed Content Rules. |
| 111 |
* NEW! Exception Dates (dates on which your Timed Content Rule shouldn't run). |
| 112 |
|
| 113 |
= 2.2 = |
| 114 |
|
| 115 |
* Much improved i18n |
| 116 |
* New Spanish translation - Many thanks to Andrew Kurtis and Jelena Kovacevic from WebHostingHub (Nueva traducción de español - Muchas gracias a Andrew Kurtis y Jelena Kovacevic desde WebHostingHub). |
| 117 |
|
| 118 |
= 2.1.5 = |
| 119 |
|
| 120 |
* Unified dashicons among all of my plugins. |
| 121 |
* Minor improvements in TinyMCE dialog UI and Date/Time UI controls. |
| 122 |
|
| 123 |
= 2.1.4 = |
| 124 |
|
| 125 |
* Fixed TinyMCE editor button for TinyMCE 4.x. |
| 126 |
|
| 127 |
= 2.1.3 = |
| 128 |
|
| 129 |
* Removed support for PHP4 in `customFieldsInterface.php`. |
| 130 |
* Fixed Wordpress version check for deciding which image to use for TinyMCE button. |
| 131 |
* Fixed "Strict Standards" warning in PHP 5.4 in `__getNextWeek()`. |
| 132 |
|
| 133 |
= 2.1.2 = |
| 134 |
|
| 135 |
* Dashicons support for WP 3.8 + added. Support for old-style icons in Admin/TinyMCE is deprecated. |
| 136 |
* Added versioning to all `wp_enqueue_style()` calls. |
| 137 |
|
| 138 |
= 2.1.1 = |
| 139 |
|
| 140 |
* CSS for JQuery UI now loaded locally as required by Wordpress plugin repository rules. |
| 141 |
* Improved UX on TinyMCE dialog and Timed Content Rules detail page. |
| 142 |
|
| 143 |
= 2.1 = |
| 144 |
|
| 145 |
* Fixed inconsistency in how the days of week to repeat on were being set up between the front and back ends. |
| 146 |
* Fixed variable scope bug that occurred on activation. |
| 147 |
* Improved i18n. |
| 148 |
|
| 149 |
= 2.0 = |
| 150 |
|
| 151 |
* Added Timed Content Rules. |
| 152 |
* Replaced AnyTime plugin with jQuery UI Timepicker (http://fgelinas.com/code/timepicker) and Wordpress's internal jQuery UI Datepicker. |
| 153 |
* HTML code created by `[timed-content-client]` can now either be enclosed in either `<div>` or `<span>` tags. |
| 154 |
* Debugging statements for `[timed-content-server]` now displayed on Post/Page (only if logged in and have the rights to edit that Post/Page - no more digging into the HTML source). |
| 155 |
* Improved code documentation. |
| 156 |
|
| 157 |
= 1.2 = |
| 158 |
|
| 159 |
* Upgraded AnyTime jQuery plugin. |
| 160 |
* `timed-content.js` is now always loaded (Size > 1KB, so not a lot of extra overhead); fixes bug when multiple/nested shortcodes are used. |
| 161 |
|
| 162 |
= 1.1 = |
| 163 |
|
| 164 |
* Fixed some internal filename discrepancies. |
| 165 |
|
| 166 |
= 1.0 = |
| 167 |
|
| 168 |
* Initial release. |
| 169 |
|
| 170 |
== Upgrade Notice == |
| 171 |
|
| 172 |
= 2.15 = |
| 173 |
|
| 174 |
* Fixed 404 errors caused by wrong URL for date/time picker localization. |
| 175 |
|
| 176 |
= 2.12 = |
| 177 |
|
| 178 |
Fixed a problem with date format for server side rules in TinyMCE plugin to make sure it is alway mm/dd/yyyy. |
| 179 |
|
| 180 |
= 2.10 = |
| 181 |
|
| 182 |
Fixed a problem with unexpected `p` elements inside server side timed content sections. Upgrade now |
| 183 |
|
| 184 |
= 2.5.1 = |
| 185 |
|
| 186 |
Fixed `current_time()` bug in __rulesShowHTML() introduced in 2.5. Upgrade now |
| 187 |
|
| 188 |
= 2.5 = |
| 189 |
|
| 190 |
Better handling od dates w/ i18n. Upgrade now |
| 191 |
|
| 192 |
= 2.4 = |
| 193 |
|
| 194 |
New version fixes incompatibility with OptimizePress. Upgrade now |
| 195 |
|
| 196 |
= 2.3 = |
| 197 |
|
| 198 |
Fixed bug when setting up weekly recurrence for Timed Content Rules. Upgrade now |
| 199 |
|
| 200 |
= 2.1.4 = |
| 201 |
|
| 202 |
Fixed TinyMCE button issue. Upgrade now |
| 203 |
|
| 204 |
= 2.1.3 = |
| 205 |
|
| 206 |
Fixed various minor bugs. Upgrade now |
| 207 |
|
| 208 |
= 2.1.2 = |
| 209 |
|
| 210 |
Dashicons support for WP 3.8 +. Upgrade once you've upgraded Wordpress to >= 3.8. |
| 211 |
|
| 212 |
= 2.1.1 = |
| 213 |
|
| 214 |
CSS for JQuery UI now loaded locally as required by Wordpress plugin repository rules. Upgrade now |
| 215 |
|
| 216 |
= 2.1 = |
| 217 |
|
| 218 |
Fixed bug in how the days of week to repeat on were being set up between the front and back ends. Upgrade now |
| 219 |
|
| 220 |
= 2.0 = |
| 221 |
|
| 222 |
New Timed Content Rules feature; AnyTime replaced due to licensing. Upgrade now. |
| 223 |
|
| 224 |
= 1.2 = |
| 225 |
|
| 226 |
AnyTime JavaScript library was outdated, breaking the Timed Content dialog box. Upgrade now. |
| 227 |
|
| 228 |
= 1.1 = |
| 229 |
|
| 230 |
Fixed some internal filename discrepancies, causing visual editor to break. Upgrade now. |
| 231 |
|
| 232 |
== Examples == |
| 233 |
|
| 234 |
`[timed-content-client show="1:00"]Show me after one minute. Since we don't want a fade-in, we can leave it out of the "show" attribute completely.[/timed-content-client]` |
| 235 |
|
| 236 |
`[timed-content-client show="1:00:1000"]Show me after one minute with a 1000 millisecond (1 second) fade-in.[/timed-content-client]` |
| 237 |
|
| 238 |
`[timed-content-client hide="1:00:1000"]Hide me after one minute with a 1000 millisecond (1 second) fade-out.[/timed-content-client]` |
| 239 |
|
| 240 |
`[timed-content-client show="1:00:500" hide="5:00:2000"]Show me after one minute with a 500 millisecond (a half-second) fade-in, then hide me after five minutes with a 2000 millisecond (2 seconds) fade-out.[/timed-content-client]` |
| 241 |
|
| 242 |
`[timed-content-server show="2013-Sep-13 20:30:00 -0600"]Show me starting at 8:30 PM Central Standard Time on September 13th, 2013. I will not be displayed before then.[/timed-content-server]` |
| 243 |
|
| 244 |
`[timed-content-server hide="2013-Sep-13 20:30:00 America/Chicago"]Hide me starting at 8:30 PM Central Daylight Time (i.e., the same timezone as Chicago) on September 13th, 2013. I will not be displayed after then[/timed-content-server]` |
| 245 |
|
| 246 |
`[timed-content-server show="2013-Sep-13 20:30:00 -0600" hide="2013-Sep-13 21:30:00 -0600"]Show me starting at 8:30 PM Central Standard Time on September 13th, 2013, then hide me an hour later. I will not be displayed before or after then.[/timed-content-server]` |
| 247 |
|
| 248 |
`[timed-content-rule id="164"]Display me based on the settings for the Timed Content Rule whoseID is 164.[/timed-content-rule]` |
| 249 |
|
| 250 |
== Usage == |
| 251 |
|
| 252 |
NOTE: All shortcodes can be built using the TinyMCE dialog. When in doubt, use the dialog to create correctly formed shortcodes. |
| 253 |
|
| 254 |
**The timed-content-client shortcode** |
| 255 |
|
| 256 |
`[timed-content-client show="mm:ss:fff" hide="mm:ss:fff"]Example Text[/timed-content-client]` |
| 257 |
|
| 258 |
* `show` - Specifies the time interval after loading the web page when the marked content should be displayed. The attribute consists of three parts, |
| 259 |
separated by colons: `mm` - minutes, `ss` - seconds, and `fff` - if greater than `0`, a fade-in effect lasting `fff` milliseconds is applied. |
| 260 |
* `hide` - Specifies the time interval after loading the web page when the marked content should be hidden. The attribute consists of three parts, |
| 261 |
separated by colons: `mm` - minutes, `ss` - seconds, and `fff` - if greater than `0`, a fade-out effect lasting `fff` milliseconds is applied. |
| 262 |
|
| 263 |
Both attributes are optional, but at least one attribute must be included. Leading zeros (0) are optional. The shortcode's behaviour depends on which attributes are used: |
| 264 |
|
| 265 |
* `show` only - Marked content is initially not visible, then appears `mm` minutes and `ss` seconds after loading with a `fff` millisecond fade-in. |
| 266 |
* `hide` only - Marked content is initially visible, then disappears `mm` minutes and `ss` seconds after loading with a `fff` millisecond fade-out. |
| 267 |
* `show` and `hide` - Marked content is initially not visible, then appears according to the values set in `show`, then disappears according to the values set in `hide`. |
| 268 |
|
| 269 |
Your users must have JavaScript enabled for this shortcode to work. |
| 270 |
|
| 271 |
**The timed-content-server shortcode** |
| 272 |
|
| 273 |
`[timed-content-server show="datetime" hide="datetime" debug="true|false"]Example Text[/timed-content-server]` |
| 274 |
|
| 275 |
* `show` - Specifies the date/time when the marked content should start being included on the web page. |
| 276 |
* `hide` - Specifies the date/time after which the marked content should stop being included on the web page. |
| 277 |
* `debug` - If `true`, adds some debugging statements to the web page as HTML comments. Defaults to `false`. |
| 278 |
|
| 279 |
The date and time are expected to be yyyy-mm-dd HH:MM (similar to ISO 8601), for example `2019-04-07 15:30` for April 7, 2019, 15:30. For backward compatiblity old "human readable" date formats should also work, but these should not be used any longer! |
| 280 |
|
| 281 |
Both `show` and `hide` attributes are optional, but at least one attribute must be included. The shortcode's behaviour depends on which attributes are used: |
| 282 |
|
| 283 |
* `show` only - Marked content is outputted only after the date/time set here. |
| 284 |
* `hide` only - Marked content is outputted only before the date/time set here. |
| 285 |
* `show` and `hide` - Marked content is outputted only during the time period defined by the `show` and `hide` attributes. |
| 286 |
|
| 287 |
**The timed-content-rule shortcode** |
| 288 |
|
| 289 |
`[timed-content-rule id="{rule_id}|{rule_name}"]Example Text[/timed-content-rule]` |
| 290 |
|
| 291 |
You can find the correct shortcode from the Timed Content Rules overview page, or use the TinyMCE dialog. |
| 292 |
|
| 293 |
**Testing server side rules** |
| 294 |
|
| 295 |
For testing the behaviour of server side rules at specific times, you may use the GET parameter `tctest` in an URL, followed by date and time in the format `YYYY-MM-DD+hh:mm:ss`. This works only you are logged in with a user which has the right to edit the displayed page or post. For example: `http://mysite.example?tctest=2018-02-10+19:16:00` will show the content as if it was February 2, 2018 at 19:16. |
| 296 |
|
| 297 |
== Developer Documentation == |
| 298 |
|
| 299 |
**Action hooks** |
| 300 |
|
| 301 |
`add_action( "timed_content_server_show", "{function_name}", {priority_level}, 4 );` |
| 302 |
|
| 303 |
Fired when the `[timed-content-server]` shortcode is encountered *AND* the content is to be displayed based on the shortcode's show/hide attributes. Functions using this hook should accept the following arguments in order: |
| 304 |
|
| 305 |
* `$post_id` - the ID of the currently displayed Post/Page |
| 306 |
* `$show` - the value of the `show` attribute. If not set, defaults to "1970-Jan-01 00:00:00 +000" |
| 307 |
* `$hide` - the value of the `hide` attribute. If not set, defaults to "2038-Jan-19 03:14:07 +000" |
| 308 |
* `$content` - The content enclosed by the shortcode |
| 309 |
|
| 310 |
`add_action( "timed_content_server_hide", "{function_name}", {priority_level}, 4 );` |
| 311 |
|
| 312 |
Fired when the `[timed-content-server]` shortcode is encountered *AND* the content is to be hidden based on the shortcode's show/hide attributes. Functions using this hook should accept the following arguments in order: |
| 313 |
|
| 314 |
* `$post_id` - the ID of the currently displayed Post/Page |
| 315 |
* `$show` - the value of the `show` attribute. If not set, defaults to "1970-Jan-01 00:00:00 +000" |
| 316 |
* `$hide` - the value of the `hide` attribute. If not set, defaults to "2038-Jan-19 03:14:07 +000" |
| 317 |
* `$content` - The content enclosed by the shortcode |
| 318 |
|
| 319 |
`add_action( "timed_content_rule_show", "{function_name}", {priority_level}, 3 );` |
| 320 |
|
| 321 |
Fired when the `[timed-content-rule]` shortcode is encountered *AND* the content is to be displayed based on the Timed Content Rule's properties. Functions using this hook should accept the following arguments in order: |
| 322 |
|
| 323 |
* `$post_id` - the ID of the currently displayed Post/Page |
| 324 |
* `$rule_id` - the ID of the Timed Content Rule being called. Use `get_post_meta( $rule_id )` to get the Rule's properties. |
| 325 |
* `$content` - The content enclosed by the shortcode |
| 326 |
|
| 327 |
`add_action( "timed_content_rule_hide", "{function_name}", {priority_level}, 3 );` |
| 328 |
|
| 329 |
Fired when the `[timed-content-rule]` shortcode is encountered *AND* the content is to be hidden based on the Timed Content Rule's properties. Functions using this hook should accept the following arguments in order: |
| 330 |
|
| 331 |
* `$post_id` - the ID of the currently displayed Post/Page |
| 332 |
* `$rule_id` - the ID of the Timed Content Rule being called. Use `get_post_meta( $rule_id )` to get the Rule's properties. |
| 333 |
* `$content` - The content enclosed by the shortcode |
| 334 |
|
| 335 |
**Filter hooks** |
| 336 |
|
| 337 |
`timed_content_filter` |
| 338 |
|
| 339 |
Filter for any content enclosed by a Timed Content shortcode. Implements the same filters as `the_content`: |
| 340 |
|
| 341 |
* `wptexturize` |
| 342 |
* `convert_smilies` |
| 343 |
* `convert_chars` |
| 344 |
* `wpautop` |
| 345 |
* `prepend_attachment` |
| 346 |
* `do_shortcode` |
| 347 |
|
| 348 |
`timed_content_filter_override` |
| 349 |
|
| 350 |
Replaces the `timed_content_filter` with another pre-existing filter to use for any content enclosed by a Timed Content shortcode. Any function hooked into this filter must return the name of a filter (as a string). |
| 351 |
|