You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Limit search-replace in DB --wp_db_id="wp_posts:1234" (New command parameter) #142
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.
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
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.
wp_posts.ID=1
wp_posts.ID=2
wp_posts.ID=3
wp_postmeta.meta_id=1
wp_postmeta.meta_id=2
wp_postmeta.meta_id=3
I guess, this could easily update the wrong records.
Activity
schlessera commentedon Jun 17, 2020
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:
What do you think about that syntax?
camya commentedon Jun 18, 2020
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.
camya commentedon Jun 18, 2020
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=<ids...> only works with one table. Too many tables set in command."
fancsali commentedon Jul 4, 2021
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...
Added --where flag to finely select rows aimed for replacement
danielbachhuber commentedon Nov 10, 2023
Open to considering this if we can figure out the naming!
Added --where flag to finely select rows aimed for replacement
Added --where flag to finely select rows aimed for replacement