Open camya opened 4 years ago
I think the idea has merit, but I'm not too sure about the naming.
We can already limit the search&replace operation to a single (or a set of) table(s) by just appending the table name as a positional argument.
So all we'd need would be to add a --rows=<ids...>
field instead.
Sample use case:
# Your example above with the new syntax:
wp search-replace 'class="old"' 'class="new"' wp_options --row=789 --log --dry-run
# Multiple tables and multiple rows possible:
wp search-replace "old" "new" wp_posts wp_post_meta --rows=1,2,3
What do you think about that syntax?
Hi Alain. Nice to meet you.
For sure, the syntax is strange. I think, the entiy and id have to be connected together in one command parameter in order to avoid strage side effects.
In your 2nd example, this means that the 6 records will be updated (if there is a match.)
Updates these records.
I guess, this could easily update the wrong records.
But I like the --rows idea nevertheless.
Idea: --rows supports only one table
The --rows=<ids...>
parameter is only allowed in connection with ONE table.
If the user ads more than one table to the command, it throws an error message.
"--rows=
I just want to say, I just spent hours with doing search and replace by hand, so I can only change the latest revision of one of my huge posts.
So, this feature would be highly appreciated...
Open to considering this if we can figure out the naming!
I often want to apply the
wp search-replace
command to only one single database record. (Sometimes for testing, sometimes, because I know, that I only have to replace data in one post.) Most often it's a single post ID in wp_posts.Current situation:
The following command makes a dry run to replace "each and every" match of class="old". It's not possible to limit it to one id of a specific WordPress table.
wp search-replace 'class="old"' 'class="new"' --log --dry-run
Feature request
Add a new command parameter (--wp_db_id="") to set the database table name and the id of a record in order to limit the search-replace command.
--wp_db_id="wp_posts:123"
The correct id field for each WordPress entity is mapped automatically internally. See example below.
Mapping example
--wp_db_id="wp_posts:123"
(translates internally into wp_posts.ID=123)--wp_db_id="wp_options:789"
(translates into wp_options.option_id=789)--wp_db_id="wp_terms:1823"
(translates into wp_terms.term_id=1823)--wp_db_id="{WordPress table name}:{id}"
New command demo
The new command looks like this. It only replaces the record with wp_options.option_id=789.
wp search-replace 'class="old"' 'class="new"' --wp_db_id="wp_options:789" --log --dry-run
Exra feature: Comma separated list of ids
May it's also possible, to add more than one id.
--wp_db_id="wp_terms:1823,1233,2399"