我认为您需要做一些PHP工作和SQL操作。你可能知道,WordPressstores data in a database---该数据库有多个表,每个表都有几个字段。您首先必须知道youtube内容所在的特定表位于哪个特定字段中。当你知道它在哪里时,你就可以替换它了。如果您不知道内容的大致位置,则无法搜索内容。例如,假设您知道这些URL位于post_content
的字段posts
桌子那就是你要看的地方。
在你弄清楚你想去哪里后,你就可以想出一个如何做这项工作的计划。我将继续我的示例,其中我在post_content
的字段posts
桌子我的计划包括确保所有youtube字符串的前缀都相同,因此我必须search and replace 所有包含youtube的记录。com/字符串post_content
领域
对于每条记录,我将首先从包含www.youtube的字符串中删除所有前缀。com/。这将使我所有的youtube字符串看起来像这样://youtube。com/。然后,我将在https://前缀上执行相同的操作,在所有http://youtube.com/字符串。这将确保仅存在的youtube字符串如下所示:http://youtube.com/...;还有youtube。com/。
接下来,我的计划将包括在所有youtube字符串前面加上http://em>。这将导致youtube上出现类似以下内容的字符串:http://http://youtube。com/;和http://youtube.com/...。没什么大不了的,因为我计划的下一部分要求将所有的双前缀更改为一个单前缀,使我所有的youtube字符串都像这样:http://youtube.com/...。塔达!(这就是你想要的,对吗?)
这是我的“搜索并销毁”代码。(我已经描述了每行代码上面的注释的作用,以便您可以将其与我上面的解释交叉引用。)
// Get the object that can do WordPress database searches.
global $wpdb;
// Select records from the "posts" table where its "post_content" field contains "youtube.com/", and return all columns (*) for each of those records.
$results = $wpdb->get_results("SELECT * FROM {$wpdb->posts} WHERE post_content LIKE \'%youtube.com/%\' ");
// Iterate over each $record of the results
foreach($results as $record) {
// Grab the string saved in post_content and put it in a variable we can manipulate.
$str = $record->post_content;
// Remove "www" from youtube strings
$str = str_replace(\'www.youtube.com/\', \'youtube.com/\', $str);
// Replace "https://" with "http://"
$str = str_replace(\'https://youtube.com/\', \'http://youtube.com/\', $str);
// Prepend the "http://"
$str = str_replace(\'youtube.com/\', \'http://youtube.com/\', $str);
// Replace the double "http://http://" with the single "http://"
$str = str_replace(\'http://http://youtube.com/\', \'http://youtube.com/\', $str);
// Save the manipulated string back into the database with the pretty youtube strings.
$record->post_content = $str;
wp_update_post(array(
\'ID\' => $record->ID,
\'post_content\' => $str,
));
}
最后一个想法:如果您将此代码放入
functions.php 文件,共
your template, 每次文件包含在WordPress进程中时,它都会运行,这并不理想。因此,您应该运行上述代码块一次(通过加载页面),然后立即删除(删除)代码块。
但是,如果能够将此代码放在模板中的某个地方,然后运行它,比如说,每24小时运行一次,直到时间结束,而不必考虑它(以防将来有更多youtube字符串需要格式化),这不是很好吗?您可以通过将上述代码放入hook 哪种方法会首先运行代码,然后设置计时器,并在计时器过期时再次运行?毕竟,查询数据库的成本很高。如果我这样做,我会使用after_setup_theme 通过设置transient. 查看以下内容:
// Whenever WordPress fires the "after_setup_theme" hook (which is pretty much on every page load), execute the block of code.
add_action(\'after_setup_theme\', function() {
// Only run our "search-and-destory" code if our transient expired
if( !get_transient(\'_numanCebi_timer\') ) {
// Our "search-and-destroy" code goes here ...
// Set a transient to expire after 24-hours so this code block is not entered again for a day.
set_transient( \'_numanCebi_timer\', TRUE, DAY_IN_SECONDS );
}
});
Update (6/14): 您的问题编辑与WordPress无关,因此在本论坛中没有密切关系;不要期望在此处回答与PhpMyAdmin相关的更新问题。看起来您在PhpMyAdmin图形用户界面中找到的是一个搜索工具。如第一个屏幕截图所示,使用通配符搜索记录(屏幕截图显示youtube.com查询中没有这些记录)。其次,在搜索和替换(“搜索和销毁”)操作中没有“操作员”。它只需找到指定的字符串并用另一个指定的字符串替换它。