Ändern von URLs im Roh-HTML-Block von Visual Composer

Lesezeit: 7 Minuten

Visual Composer speichert den rohen HTML-Block als Base64-codierte (und URL-codierte) Zeichenfolge in der Datenbank. Meine Website muss von http auf https umstellen und ich müsste die in diesen Roh-HTML-Blöcken verwendeten Asset-URLs ändern, damit sie mit https bereitgestellt werden. Offensichtlich funktioniert das Such-/Ersetzungstool von WordPress hier nicht.

Kennt jemand hierfür eine Lösung?

  • Eine einfache PHP-Abfrage kann die Aufgabe erledigen. Wählen Sie die Tabellen aus, die die Daten von VC enthalten, und führen Sie dann einen aus str_replace()dann erneut einfügen

    – ProEvilz

    16. November 2017 um 12:48 Uhr


Benutzeravatar von Alexander Sanik
Alexander Sanik

Ich habe auch dieses Problem und habe dafür ein kleines Skript geschrieben.
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("https://stackoverflow.com/" . $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');

  • Gut gemacht. Wenn ich es das nächste Mal verwenden muss, werde ich zurückkommen und es ausprobieren. Danke

    – Seher

    9. Okt. 2018 um 18:59 Uhr

  • Der Vollständigkeit halber. Ihr Kommentar //If something not working, try change this rawurlencode to urlencode, etc... dumped it =) sollte sein rawurldecode Und urldecode bzw.

    – frezq

    25. Januar 2019 um 21:40 Uhr

  • Vielen Dank, Kumpel. Nur eine Erinnerung für andere Benutzer, nicht zu vergessen, diese Zeile entsprechend ihrem eigenen Bedarf zu ändern $tag = 'vc_raw_js';//'vc_raw_js';//'vc_raw_html';//vc_raw_js

    – Yug Kapoor

    8. März 2020 um 13:01 Uhr

  • Hallo, ich habe einen Block wie diesen: [vc_raw_html css=”.vc_custom_1587030205472{margin-top: 0px !important;margin-right: 0px !important;margin-bottom: 0px !important;margin-left: 0px !important;}”] Das Skript versteht es nicht. Ich denke, das liegt am CSS-Attribut und am {}. Wie kann ich den regulären Ausdruck bearbeiten, um ihn zu erstellen? Danke

    – djoo

    11. Dezember 2020 um 13:50 Uhr

  • Gut gemacht. Danke schön!

    – Mike

    15. Januar 2021 um 15:04

Dieses WordPress-Plugin hat es geschafft:
https://wordpress.org/plugins/better-search-replace/
Ich habe es mit codierten Zeichenfolgen versucht und hatte Erfolg.

Von hier: https%3A%2F%2Fevergreendent.com%2Fhu

Dazu:https%3A%2F%2Fevergreendent.hu

So was:
http://prntscr.com/qxu65n

Es ersetzt Visual Composer / WP Bakery Pagebuilder-Links.

Davon:
https://evergreendent.com/hu

Dazu:
https://evergreendent.hu

  • Dies sollte die akzeptierte Antwort sein. Solider Fund. Sie müssen nur die URL-codierten Zeichenfolgen beim Suchen und Ersetzen verwenden (sowie ein normales, nicht codiertes Suchen und Ersetzen für alle Orte, die nicht VC sind), und schon sind Sie fertig! Danke!

    – Samyer

    1. Okt. 2020 um 20:10 Uhr


  • Vielen Dank. (%2F), war sehr knifflig (Es funktioniert) [ Save my Brain and Time ]

    – Shahinul-Islam

    3. Januar 2021 um 12:59

  • Ich muss sagen, ich habe viele Versuche unternommen, Ihren genauen Ratschlägen und Ihrem Screenshot zu folgen, und bei einem Probelauf werden 0 Instanzen gefunden (mehrere andere Plugins finden auch 0 Instanzen), wenn ich im WPbakery Visual Composer Builder-Tool deutlich erkennen kann, dass die alten URLs sind noch da. In diesem Fall befinden sie sich in einem „Raw HTML“-Block und es gibt mindestens 6 Fälle, die mir bekannt sind. Jeder?

    – Benutzer3035649

    16. August 2021 um 15:11 Uhr

Benutzeravatar von Rajkumar Gour
Rajkumar Gour

Platzieren Sie den folgenden Code in der Datei „functions.php“ Ihres Themes

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);
}

Es wird Ihnen im Frontend helfen. Ändern Sie example.com in Ihren Site-Namen

  • Dies wird ersetzt JEDEN Instanz von ‘http://’ in BELIEBIG Beitrag, sei es eine URL zu einer anderen Website oder was auch immer. It will help you on the front end -> Erklären Sie zumindest Ihren Code, da dies möglicherweise die Website von OP beschädigt hätte, wenn Sie nicht genau wüssten, was er tut.

    – ProEvilz

    16. November 2017 um 12:56 Uhr


  • Sie können den Buchstaben Ihrer Website str_replace(‘ hinzufügen.deine Seite‘, ‘deine Seite‘, $content);

    – Rajkumar Gour

    16. November 2017 um 12:57 Uhr

  • Dies funktioniert nicht für Websites mit http://www und wenn OP eine Mischung aus hat http://www Und http:// dann wird das nicht 100%ig funktionieren.

    – ProEvilz

    16. November 2017 um 12:59 Uhr


  • Es handelt sich um einen Filter zum Ändern der Inhaltsausgabe. Es wird nichts in Ihrer Datenbank bewirken.

    – Rajkumar Gour

    16. November 2017 um 13:00 Uhr

  • Danke, aber Visual Composer-Elemente lösen das normalerweise nicht aus the_content Haken. Schnell getestet und es funktioniert nicht mit dem rohen HTML-Element

    – Seher

    16. November 2017 um 13:00 Uhr


Ich brauchte eine Lösung für a Unterstützungsanfrage und habe es wie folgt gelöst.

Sie können die verwenden Go Live Update URLs-Plugin zusammen mit dem folgenden Filter.

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 );

Führen Sie das Plugin wie gewohnt aus und Sie werden feststellen, dass alle URLs innerhalb der rohen HTML-Blöcke ersetzt wurden.

  1. Alte URL: http: (oder eine andere URL).
  2. Neue URL: https: (oder eine andere URL).

verwenden https://wordpress.org/plugins/velvet-blues-update-urls/ und aktualisieren Sie die URL im Admin-Bereich. Dadurch werden alle URLs auf der Website entweder im Inhalt oder in den URL-Links geändert.

  • Bitte lesen Sie die Frage noch einmal. Dies ist ein gutes Plugin, ersetzt jedoch nichts in der codierten Zeichenfolge, die von Visual Composer gespeichert wird

    – Seher

    16. November 2017 um 20:11 Uhr

  • Bitte lesen Sie die Frage noch einmal. Dies ist ein gutes Plugin, ersetzt jedoch nichts in der codierten Zeichenfolge, die von Visual Composer gespeichert wird

    – Seher

    16. November 2017 um 20:11 Uhr

1451030cookie-checkÄndern von URLs im Roh-HTML-Block von Visual Composer

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy