Visual Composer guarda el bloque HTML sin procesar como una cadena codificada en base64 (y codificada en URL) en la base de datos. Mi sitio necesita pasar de http a https, y necesitaría cambiar las URL de los activos que se usan en estos bloques HTML sin procesar para que se sirvan con https. Claramente, la herramienta de búsqueda/reemplazo de WordPress no funcionará aquí.
¿Alguien sabe una solución para esto?
Alejandro Sanik
Yo también tengo este problema, y escribí un pequeño guión para esto.
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');
-
Buen trabajo. La próxima vez que necesite usar esto, volveré y lo probaré. Gracias
– vidente
9 oct 2018 a las 18:59
-
por el bien de la terminación .. su comentario
//If something not working, try change this rawurlencode to urlencode, etc... dumped it =)
debiera serrawurldecode
yurldecode
respectivamente.– frecuencia
25/01/2019 a las 21:40
-
Muchas gracias compañero. Solo un recordatorio para que otros usuarios no olviden cambiar esta línea según su propio uso
$tag = 'vc_raw_js';//'vc_raw_js';//'vc_raw_html';//vc_raw_js
–Yug Kapoor
8 de marzo de 2020 a las 13:01
-
Hola, tengo un bloque como este: [vc_raw_html css=”.vc_custom_1587030205472{margin-top: 0px !important;margin-right: 0px !important;margin-bottom: 0px !important;margin-left: 0px !important;}”] El guión no lo entiende. Creo que es porque el atributo css y {}. ¿Cómo puedo editar la expresión regular para hacerlo? Gracias
– djoo
11 dic 2020 a las 13:50
-
Gran trabajo. ¡Gracias!
– Miguel
15 de enero de 2021 a las 15:04
Este complemento de WordPress hizo el truco:
https://wordpress.org/plugins/mejor-búsqueda-reemplazar/
Lo probé con cadenas codificadas y tuve éxito.
De esto: https%3A%2F%2Fevergreendent.com%2Fhu
A esto:https%3A%2F%2Fevergreendent.hu
Como esto:
http://prntscr.com/qxu65n
Reemplazó los enlaces del creador de páginas de Visual Composer / WP Bakery.
De esto:
https://evergreendent.com/hu
A esto:
https://evergreendent.hu
-
Esta debería ser la respuesta aceptada. Sólido hallazgo. ¡Solo tiene que usar las cadenas codificadas de URL en la búsqueda y reemplazo (así como una búsqueda y reemplazo regular, sin codificar para cualquier lugar que no sea VC) y estará bien! ¡Gracias!
– Samyer
1 oct 2020 a las 20:10
-
Muchas gracias. (%2F), fue muy complicado (Funciona) [ Save my Brain and Time ]
– Shahinul Islam
3 de enero de 2021 a las 12:59
-
Debo decir que hice muchos intentos siguiendo su consejo exacto y captura de pantalla y encuentra 0 instancias en una ejecución en seco (varios otros complementos también encuentran 0 instancias) cuando puedo ver claramente en la herramienta de creación de compositor visual WPbakery que las URL antiguas todavía están allí. En este caso, están en un bloque “HTML sin procesar” y hay al menos 6 instancias que conozco. ¿Alguien?
– usuario3035649
16 de agosto de 2021 a las 15:11
Rajkumar Gour
coloque el siguiente código en las funciones de su tema.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);
}
te ayudará en la parte delantera. Cambie example.com al nombre de su sitio
-
Esto reemplazará CADA instancia de ‘http://’ en CUALQUIER publicar, ya sea una URL a otro sitio o lo que sea.
It will help you on the front end
-> al menos explique su código porque esto podría haber dañado potencialmente el sitio de OP si lo hizo sin saber lo que hace completamente.– ProEvilz
16 de noviembre de 2017 a las 12:56
-
Esto no funcionará para sitios con
http://www
y si OP tiene una mezcla dehttp://www
yhttp://
entonces esto no funcionará al 100%.– ProEvilz
16 de noviembre de 2017 a las 12:59
-
es un filtro para cambiar la salida del contenido. no hará nada en su base de datos.
– Rajkumar Gour
16/11/2017 a las 13:00
-
Gracias, pero los elementos de Visual Composer generalmente no activan el
the_content
gancho. Probado rápidamente y no funciona con el elemento html sin formato– vidente
16/11/2017 a las 13:00
Necesitaba una solución para un solicitud de soporte y lo resolvió de la siguiente manera.
Puedes usar el Complemento Go Live Update Urls junto con el siguiente filtro.
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 );
Ejecute el complemento como de costumbre y encontrará que todas las URL han sido reemplazadas dentro de los bloques HTML sin formato también han sido reemplazados.
- URL antigua:
http:
(o cualquier otra URL). - Nueva URL:
https:
(o cualquier otra URL).
usar https://wordpress.org/plugins/velvet-blues-update-urls/ y actualice la URL desde el panel de administración, esto cambiará todas las URL en el sitio, ya sea en el contenido o en los enlaces de URL.
-
lee la pregunta de nuevo por favor. este es un buen complemento, pero no reemplazará nada en la cadena codificada almacenada por el compositor visual
– vidente
16 de noviembre de 2017 a las 20:11
-
lee la pregunta de nuevo por favor. este es un buen complemento, pero no reemplazará nada en la cadena codificada almacenada por el compositor visual
– vidente
16 de noviembre de 2017 a las 20:11
Una simple consulta de PHP puede hacer el trabajo. Seleccione las tablas que contienen los datos de VC, luego haga una
str_replace()
luego vuelva a insertar– ProEvilz
16 de noviembre de 2017 a las 12:48