WordPress 用 img src 替换 [vc_single_image] 简码的所有实例

WordPress replace all instances of [vc_single_image] shortcode with img src

我正在更新我的 WordPress 网站并删除 https://wpbakery.com/ 编辑器,我想删除插件生成的标记。

我正在使用的这个插件 https://codecanyon.net/item/shortcode-cleaner-clean-wordpress-content-from-broken-shortcodes/21253243 将毫无问题地删除所有短代码,除了一个。它正在删除图像。

仔细检查后,使用以下短代码将图像发布在后端

[vc_single_image image="10879" img_size="large" add_caption="yes" alignment="center"]

我想更新所有引用以使用 HTML 代替

<img src="IMGURL">

但是,我不确定这样做的正确方法,请问有什么建议吗?

在 MySQL 8 中有一个正则表达式替换,但如果你没有,你可以用 PHP.

$query = new WP_Query( [-- whatever posts you want--] );
while ( $query->have_posts() ) {
    $query->the_post();

    $content = get_the_content();

    preg_match('/\[vc_single_image image="(\d+)" img_size="(\w+)"[^\]]*\]/', $content, $matches);

    if( isset($matches[1]) ) {
       $url = wp_get_attachment_image_url( (int) $matches[1], $matches[2] );
       $img = sprintf( '<img src="%s" />', $url );

       $new_content = str_replace( $matches[0], $img, $content );

       wp_update_post( [ 'ID' => get_the_ID(), 'post_content' => $new_content] );
   }
}

这是更新 post/page 内容中所有图片的更新答案。上面的代码找到内容的第一张图片并更新它。

// Args for the WP_Query
$args = array(
    'post_type' => 'post',
    'posts_per_page' => 10,
    'post__in' => array(5824),
    'orderby' => 'post__in' 
);

// Execute WP_Query with args
$query = new WP_Query( $args );

// Start the Loop
while ( $query->have_posts() ) {
    $query->the_post();
    // Get Page/Post content 
    $content = apply_filters('the_content', $content);

    // Get the vc_single_image count from the post 
    $found_keyword = substr_count( $content,"vc_single_image" );

    // Start loop to replace all elements from the content 
    for ($i=0; $i < $found_keyword; $i++) { 
        // Get the position of vc_single_image shortcode with Image ID and Image Size
        preg_match( '/\[vc_single_image image="(\d+)" img_size="(\w+)"[^\]]*\]/', $content, $matches );

        // Check shotcode are exist on loop
        if( isset( $matches[1]) ){
            
            // Get the Image ur by Image id and Size
            $url =  wp_get_attachment_image_url( (int) $matches[1], $matches[2] );
            $img = sprintf( '<img src="%s" />', $url );

            // Replce shortcode with <img> tag
            $content = str_replace( $matches[0], $img, $content );

        }
    }

    // Update post content with updated content with <img> tag
    wp_update_post( [ 'ID' => get_the_ID(), 'post_content' => $content] );
}
// END the Loop