[wp-trac] [WordPress Trac] #55942: Add a "type" field to the meta and options tables

WordPress Trac noreply at wordpress.org
Thu Jul 21 23:23:26 UTC 2022

#55942: Add a "type" field to the meta and options tables
 Reporter:  azaozz                        |       Owner:  (none)
     Type:  enhancement                   |      Status:  new
 Priority:  normal                        |   Milestone:  6.1
Component:  Database                      |     Version:
 Severity:  normal                        |  Resolution:
 Keywords:  needs-unit-tests needs-patch  |     Focuses:

Comment (by azaozz):

 Replying to [comment:16 barry.hughes]:

 > Native JSON support simply means there would be support for a safer (but
 also more limited) form of serialization with different 'performance'
 characteristics (I'm using that a little loosely to mean not just runtime
 costs, but space requirements -- JSON tends to be more compact).
 > The big win here in my opinion though is safety (object injection not
 being possible with JSON), and I think there is value in WordPress
 offering that safer path.

 Yep, I agree. I'm only uneasy about adding that support at the same
 place/same level where PHP types are added/defined.

 > > If a plugin wants to use JSON, it would be pretty easy to encode the
 value before passing it to the API.
 > Yep, also true, and it doesn't close off a future where some kind of
 wrapper for JSON-encoded options is supported by WP (out of scope here).

 Actually... Why not add such wrapper/helper functions now.

 As far as I imagine it, it would only accept arrays. Then JSON encode
 them, and save as strings. Then the corresponding method will JSON decode
 the string from the DB. The values will be PHP arrays after decoding.
 Think that would work quite well :)

 > from a back-compat perspective, I'd have thought null (PHP) would map to
 'original Options API behaviour'

 Yes, implementing this enhancement will change the returned type and in
 some cases the returned value. For example saving `true` as option value
 would currently return string `"1"`, but not if the option is checked
 immediately after adding. Then it would return the proper type.

 Been thinking how to handle the back-compat here, may turn out to be more
 problematic than expected. Seems in the worst case scenario we can add
 another param to `get_option()`, etc. functions to specify whether to use
 strict types. (I'd hate to do that but seems it may be needed). Lets look
 in this again after there is a patch and tests :)

Ticket URL: <https://core.trac.wordpress.org/ticket/55942#comment:17>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform

More information about the wp-trac mailing list