更改视觉作曲家的原始 html 块中的 url

See*_*eer 1 wordpress migrate visual-composer

Visual Composer 将原始 HTML 块保存为数据库中的 base64 编码(和 url 编码)字符串。我的网站需要从 http 转到 https,我需要更改这些原始 HTML 块中使用的资产 URL,以便与 https 一起使用。很明显,Wordpress 搜索/替换工具在这里不起作用。

有人知道解决方案吗?

小智 8

我也有这个问题,为此我写了一点脚本。
https://github.com/lSanik/WordPress-VisualComposer-RawHtml-Base64-Replace

# WordPress VisualComposer RawHtml Base64  data base mass Replacing

For developers only!

This is little script for mass changes in wordpress visual composer database. 
You can change all domains, html code, scripts and etc, data that in base64 coded.

MAKE BACK-UP database table WP_POSTS!

All what you need, its take this in function.php at your theme folder.
Change sample data to yours needs.
Run url - your_site.com/replace_composer_html_raw_base64

If success - all data will be changed and you are happy now ;)


<?php
function replace_composer_html_raw_base64(){

    if($_SERVER['REQUEST_URI'] == '/replace_composer_html_raw_base64'){
        global $wpdb;

        ini_set('error_reporting', E_ALL);
        ini_set('display_errors', 1);
        ini_set('display_startup_errors', 1);

        $response = $wpdb->get_results('SELECT ID,post_content FROM wp_posts WHERE post_type="page"',ARRAY_A);
        $count = count($response);
        $tag = 'vc_raw_js';//'vc_raw_js';//'vc_raw_html';//vc_raw_js
        $pattern = '\['.$tag.'].*?\]';

        foreach ($response as $post){

            $matches = '';
            preg_match_all('/' . $pattern . '/s', $post['post_content'], $matches);
            $content = replacedComposerHtmlRawString($matches[0],$tag);

            if(!$content && count($content)<1){
                continue;
            }

            foreach ($content as $key=>$item){
                $post['post_content'] = str_replace($item['original'],$item['modified'],$post['post_content']);
            }

            //$post['post_content'] = replacedComposerRawFromTo();

            $upd = array(// Update the post into the database
                'ID'           => $post['ID'],
                'post_content' => $post['post_content'],
            );
            wp_update_post( $upd );
        }

        die('If no errors, all successful! =)  ');
    }
}
// String with shortcode tag, and different tag send, like vc_raw_html,vc_raw_js, etc.
function replacedComposerHtmlRawString($strings,$tag){

    if(!is_array($strings)){
        return false;
    }

    $return=array();
    foreach ($strings as $key=>$string){
        $return[$key]['original']= $string;
        $string = str_replace('['.$tag.']','',$string);
        $string = str_replace('[/'.$tag.']','',$string);
        $string = base64_decode($string);
        $string = rawurldecode($string);//If something is not working, try changing rawurldecode to urldecode, etc... dumped it =)

        //place to replace decoded string
        $string = replacedComposerRawFromTo($string);
        //end place..

        $string = rawurlencode($string);
        $string = base64_encode($string);
        $string = '['.$tag.']'.$string.'[/'.$tag.']';
        $return[$key]['modified'] = $string;
    }

    return $return;
}

function replacedComposerRawFromTo($string,$fromTo=false){
    //Changed from 'value' = > to 'value';
    $fromTo=array(
    //Sample data to change!
        'http'=>'https',
        'token123'=>'token321',
        '<script>Hello World</script>'=>'<script>HI WORLD</script>',

    );

    foreach ($fromTo as $from=>$to){
        $string = str_replace($from,$to,$string);
    }

    return $string;
}

add_action('init', 'replace_composer_html_raw_base64');
Run Code Online (Sandbox Code Playgroud)