humanmade / clean-up-leftover-multi-meta
Remove duplicate meta values for any single meta key with multiple meta value rows in the database.
Installs: 201
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 2
Forks: 0
Open Issues: 0
Type:wordpress-plugin
Requires (Dev)
- humanmade/coding-standards: ^1.2.1
README
There is a potential bug in the REST API (identified by @MiguelAxcarHM, and being discussed between @TimothyBJacobs and @kadamwhite here in WordPress core Slack) where updates to meta values can fail unexpectedly because of unrelated other meta.
Our working theory is that this happens when a meta key is registered (using register_meta
or register_post_meta
) with 'single' => true
, but that meta key still has multiple rows in the database as you would expect if it was previously used as 'single' => false
. For example,
+---------+---------+---------------------------------------------+---------------+
| meta_id | post_id | meta_key | meta_value |
+---------+---------+---------------------------------------------+---------------+
| 8898 | 5804 | process_owner | 333 |
| 11870 | 5804 | process_owner | 333 |
| 13868 | 5804 | process_owner | 333 |
| 15748 | 5804 | process_owner | 333 |
+---------+---------+---------------------------------------------+---------------+
This plugin provides a CLI command which can be used to iterate through all posts of a post type, check for registered meta for that post, and identify whether any single
-registered meta keys have duplicated rows in the postmeta table. The duplicated meta IDs are then cleaned out.
If a meta key has multiple rows for a post with different values, we should leave those alone.
Example command:
wp clean-up-leftover-multi-meta --post-type=my-cpt-name --dry-run