我已经使用Advanced Custom Fields插件在Wordpress中创建了一个新的“自定义字段”。我现在的目标是将所有下载链接从“ the_content”移动到新创建的自定义字段“ the_field('download_link')”。问题是我有10,000多个帖子需要修改。我想知道是否有一种快速的方法,而不是手动移动每个帖子的下载链接?
请查看下面的图片,以了解我要实现的目标。
Before | After
一个障碍是所有内容都保存在“ wp_posts”表中,而自定义字段内容保存在“ wp_postmeta”表中。
保存在“ download_link”自定义字段中的内容在“ wp_postmeta”表中如下所示:
(8214, 2282, 'download_link', '<div class=\"source\"><a href=\"https://www.google.com/\" target=\"_blank\"><img src=\"https://www.google.com/image.png\"></a></div>'),
(8215, 2282, '_download_link', 'field_5cffd35335ce3'),
(8220, 2280, 'download_link', '<div class=\"source\"><a href=\"https://www.google.com/\" target=\"_blank\"><img src=\"https://www.google.com/image.png\"></a></div>'),
(8221, 2280, '_download_link', 'field_5cffd35335ce3'),
(8226, 2278, 'download_link', '<div class=\"source\"><a href=\"https://www.google.com/\" target=\"_blank\"><img src=\"https://www.google.com/image.png\"></a></div>'),
(8227, 2278, '_download_link', 'field_5cffd35335ce3'),
可以做到吗?还是实现此目标的唯一真正方法是手动移动下载链接?
在此先感谢您的帮助。
最佳答案
如果您的下载链接的格式始终相同,则可以自动完成。
备份数据库
创建一个名为my-cleanup.php
的php文件。
循环浏览所有产品,获取描述中的链接并将其移至post_meta。
用WP-CLI启动文件:wp eval-file my-cleanup.php
样例代码
// Select the posts you want
$args = array(
'post_type' => 'post',
'post_status' => 'any',
// -1 means all posts
// For debug, set this to a small number
'posts_per_page' => 3,
);
// Retrieve posts
$query = new WP_Query( $args );
$posts = $query->posts;
// Pattern to match
// [wpdm_package id='90228']
$pattern = "/(\[wpdm_package id='\d+'\])/";
// Process posts one by one
foreach ( $posts as $post ) {
echo "Processing " . $post->post_title . "\n";
$post_args['ID'] = $post->ID;
// Get the shortcode from the post content
preg_match( $pattern, $post->post_content, $matches );
// Do we have a match?
if ( count( $matches) > 0 ) {
// Retrieve shortcode
$shortcode = $matches[0];
// Convert shortcode, maybe add some HTML
$link = do_shortcode( $shortcode );
// remove shortcode from description
$post_args['post_content'] = preg_replace( $pattern, '', $post->post_content );
// Update post
wp_update_post( $post_args );
// Create the post_metas
add_post_meta( $post->ID, '_download_link', 'field_5cffd35335ce3', true );
add_post_meta( $post->ID, 'download_link', $link, true );
}
}
笔记
备份数据库
测试几篇文章,以使您对代码充满信心。您可以在编辑器中还原以前的修订。
然后试穿100,然后试穿1000。您通常会发现帖子输入的方式略有不同。
要在10.000个帖子上运行可能要花费几个小时,这就是为什么需要WP-CLI命令的原因。