• Saltar a la navegación principal
  • Saltar al contenido principal
  • Saltar a la barra lateral principal

DecodeCMS

Tu WordPress a otro Nivel ...

  • Acerca de
  • Contacto
  • Inicio
  • Tutoriales
    • Themes
    • Plugins
    • Core
    • Recursos
  • Cursos
  • Acceder
    • Mis cursos
    • Mi Cuenta
    • Acceder
Inicio / Tutoriales / Core / Modificar contenido usando código en WordPress

Modificar contenido usando código en WordPress

[ 27 julio 2022 ] [ Autor: Jhon Marreros Guzmán ][ Core - Avanzado] [ ]

funcionalidad

Suscríbete a DecodeCMS:  

Recientemente tuve un cliente que requería una modificación masiva de su contenido ya que necesitaba cambiar un texto específico por otro, en este artículo veremos diferentes formas de hacer modificaciones al contenido a través de código.

 

Generalidades

De manera general tenemos dos formas de realizar modificaciones al contenido a través de código, estas son:

  • Modificaciones a través de Hooks de filtros
  • Modificaciones permanentes en la Base de Datos

 

Modificación de contenido a través de Hooks de Filtro

Esta es la forma «light» de modificación, aunque si somos estrictos esto no sería una modificación real al contenido, ya que sólo cambiaremos la forma en la que el contenido se visualiza en el sitio web. Para realizar esto usamos el Hook de filtro llamado the_content

El siguiente código muestra un ejemplo de uso del filtro the_content para cambiar el texto de todas las entradas

add_filter('the_content', 'dcms_change_text_fixed_content');
function dcms_change_text_fixed_content($content){
    if ( is_singular('post') || is_home() || is_archive() ) {
        return str_replace('Texto cambiar', 'NUEVO TEXTO', $content);
    }
    return $content;
}

Es posible también usar expresiones regulares para detectar el texto y cambiarlo, por ejemplo:

add_filter('the_content', 'dcms_change_text_with_regexp');
function dcms_change_text_with_regexp($content){
    if ( is_singular('post') || is_home() || is_archive() ) {
        
        $pattern = '/(243)[ -]?(456)[ -]?(412)/i';
        return preg_replace($pattern, "$1-$2$3", $content);
    }
    return $content;
}

Como habrás notado, en ambos casos se retorna el contenido modificado, la variable $content, para la visualización en el sitio.

 

Modificación de contenido de manera permanente en la Base de Datos

Esta sería la manera definitiva para la modificación de contenido, muy útil para temas de optimización, ya que evitarás el uso de filtros cada vez que se muestre el contenido.

También es recomendable en caso tu contenido sea consumido por otros servicios externos que se conecten directamente a la Base de Datos o a través de la API Rest.

Anteriormente vimos cómo usar funciones de WordPress fuera de WordPress, usaremos esa misma técnica para crear la lógica de actualización de contenido.

Puedes usar el siguiente código en un nuevo archivo .php accesible desde la url de tu sitio, para que puedes ejecutarlo manualmente al ingresar la url en el navegador.


<?php
define( 'WP_USE_THEMES', false );
require __DIR__ . '/wp-blog-header.php';


global $wpdb;

$sql = "SELECT * FROM {$wpdb->prefix}posts
 			WHERE post_content REGEXP '243[ -]?456[ -]?412' AND post_type = 'post'";

$posts = $wpdb->get_results($sql);

kses_remove_filters();

foreach ($posts as $post) {

	$content = $post->post_content;
    $pattern = '/(243)[ -]?(456)[ -]?(412)/i';
	$new_content =  preg_replace($pattern, "$1-$2$3", $content);

	$data = array(
		'ID' => $post->ID,
		'post_content' => $new_content,
	);
    
	$result = wp_update_post( $data );

	error_log(print_r("Se actualizó post: {$result}", true));
	
}

kses_init_filters();

El código de corrección de contenido en la Base de Datos sólo se debería ejecutar una vez.

En el código anterior:

  • Requerimos el archivo wp-blog-header.php para usar las funciones de WordPress
  • Definimos el objeto global $wpdb para usar las funciones de Base de Datos
  • Consultamos todos los registros que necesitamos actualizar
  • Antes de hacer las modificaciones usamos la función kses_remove_filters() para quitar cualquier tipo de restricción de filtros en la actualización (por ejemplo por seguridad WordPress no permite insertar iframes a través de código)
  • Usamos la lógica de actualización de contenido y usamos la función wp_update_post() para actualizar los cambios en la Base de Datos
  • Finalmente activamos nuevamente los filtros de WordPress con kses_init_filters()

Podríamos hacer toda la lógica en MySQL, sin embargo PHP te da más flexibilidad ya que por ejemplo puedes usar expresiones regulares y funciones de WordPress.
MySQL 8 ya dispone de funciones adicionales de expresiones regulares para actualizaciones.

 

Conclusión

Si tienes que modificar muchas entradas, páginas o cualquier otro CPT, puedes evaluar hacerlo directamente a través de código, tal como hemos visto en este artículo ya sea usuando los filtros de WordPress o directamente modificando en la Base de Datos.

 

¿Me ayudas a llegar a más gente?

Twittear Compartir LinkedIn WhatsApp

Artículos Relacionados

  • Quitar el menú de WooComerce en la administración de WordPress para ciertos usuariosQuitar el menú de WooComerce en la administración de WordPress para ciertos usuarios
  • Eliminar automáticamente las imágenes al borrar una entradaEliminar automáticamente las imágenes al borrar una entrada
  • Ocultar precios de productos a usuarios visitantesOcultar precios de productos a visitantes en WooCommerce
  • Deshabilitar Información de Usuarios de la REST API de WordPressDeshabilitar Información de Usuarios de la REST API de WordPress
Valora este artículo : 1 barra2 barras3 barras4 barras5 barras (3 votos, promedio: 5,00 de 5)
Cargando...

Interacciones con los lectores

Comentarios

  1. Milton

    22 septiembre, 2022

    Hola, tengo que modificar un plugin que compré, para cambiarle ciertos textos, pero tengo la duda si debo hacerlo con el plugin sin instalar y luego subirlo con los cambios, o modificarlo directamente en el editor de plugin en wordpress, lo que no sé es si en una futura actualización los cambios se borren, me puedes ayudar por favor. Gracias

    • Jhon Marreros Guzmán

      23 septiembre, 2022

      Hola, has evaluado usar Loco Translate?, es un plugin para traducciones que podrías evaluar para traducir los textos de plugins y temas. Revisa este artículo de referencia: https://decodecms.com/cambiar-textos-de-traduccion-en-wordpress/

  2. loke

    28 julio, 2023

    Hola. ¿Y si tengo ciertas url en formato texto (https : // lawebquesea [todo junto claro está]) pero quiero cambiarlas a formato en el contenido de los artículos? ¿Cómo podríamos manipular esto y que de resultado para todos los artículos? Gracias.

    • Jhon Marreros Guzmán

      2 agosto, 2023

      Hola, tienes que cambiar la expresión regular para que coincida con lo que quieres cambiar y reemplazar. Saludos.

Para escribir código envolver con: <pre class="language-xxx"><code> </code></pre> ,reemplaza las xxx (php, css, html)

*

* Gravatar habilitado

Barra lateral principal

Curso Decodifica WordPress

Únete a DecodeCMS

Recibirás como regalo:

Guia práctica con video:
¿Quieres agregar código a WordPress? Revisa las diferentes opciones que tienes.Ver más

Omnisend
Alojamiento Wordpress

Niveles

Básico Intermedio Avanzado

Etiquetas

accesibilidad css dashboard editor error funcionalidad herramientas imagen js librería mejoras optimización seguridad SEO social woocommerce

Populares

Shortcode para mostrar la fecha en WordPress

Mostrar lista de autores en WordPress

5 Temas para la Administración de WordPress

Copiar al portapapeles en WordPress sin plugins

© logo decode pie
Política de Privacidad | Política de devoluciones
Copyrigth 2026 Todos los derechos reservados