wordpress 更改visual composer的原始html块中的url

u1ehiz5o  于 2023-04-20  发布在  WordPress
关注(0)|答案(5)|浏览(163)

Visual Composer将原始HTML块作为base64编码(和url编码)字符串保存在数据库中。我的网站需要从http到https,我需要更改这些原始HTML块中使用的资产URL以使用https。显然,WordPress搜索/替换工具在这里不起作用。
有人知道解决办法吗?

kdfy810k

kdfy810k1#

我也有这个烦恼,我为此写了一点剧本。
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');
dgtucam1

dgtucam12#

这个WordPress插件做到了这一点:https://wordpress.org/plugins/better-search-replace/我用编码字符串尝试了一下,成功了。
从这个:https%3A%2F%2Fevergreendent.com%2Fhu
对此:https%3A%2F%2Fevergreendent.hu
例如:http://prntscr.com/qxu65n
它取代了Visual Composer / WP Bakery页面构建器链接。
标签:https://evergreendent.com/hu
标签:https://evergreendent.hu

q7solyqu

q7solyqu3#

把下面的代码放在你的主题的functions.php中

add_filter('the_content', 'chnage_http_to_https', 10);
function chnage_http_to_https($content){
    return str_replace('http://example.com','https://example.com', $content);
}

它将帮助您在前端。chnageexample.com到您的网站名称

niknxzdl

niknxzdl4#

我需要一个support request的解决方案,并通过以下方式解决了它。
您可以将Go Live Update Urls plugin与以下过滤器沿着使用。

add_action( 'go-live-update-urls/database/after-update', function ( $old_url, $new_url ) {
    global $wpdb;
    $possibles = $wpdb->get_results( "SELECT ID, post_content FROM {$wpdb->posts} WHERE post_content LIKE '%[vc_raw_html]%';" );

    foreach ( $possibles as $possible ) {
        $replaced = preg_replace_callback( '/\[vc_raw_html\](.*?)\[\/vc_raw_html]/', function ( $matches ) use ( $old_url, $new_url ) {
            list( $full, $encoded ) = $matches;
            $replaced = str_replace( $old_url, $new_url, base64_decode( $encoded ) );
            return str_replace( $encoded, base64_encode( $replaced ), $full );
        }, $possible->post_content );

        if ( $replaced !== $possible->post_content ) {
            $wpdb->update( $wpdb->posts, [
                'post_content' => $replaced,
            ], [
                'ID' => $possible->ID,
            ] );
        }
    }
}, 10, 2 );

像正常运行插件,你会发现所有的URL已被替换的原始HTML块已被替换以及。
1.旧URL:http:(或任何其他URL)。
1.新URL:https:(或任何其他URL)。

yuvru6vn

yuvru6vn5#

使用https://wordpress.org/plugins/velvet-blues-update-urls/并从管理面板更新URL,这将更改网站中的所有URL,无论是在内容还是URL链接中。

相关问题