• 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

Modificar contenido usando código en WordPress

[ hace 8 meses ] [ Autor: Jhon Marreros Guzmán ][ Core - Avanzado] [ ]

funcionalidad

¿Me ayudas a llegar a más gente?

Twittear Compartir LinkedIn WhatsApp

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.

 

¿Aún con dudas?, en el siguiente video se detallan los puntos anteriores.

Suscríbete a DecodeCMS:  

 

¿Me ayudas a llegar a más gente?

Twittear Compartir LinkedIn WhatsApp

Artículos Relacionados

  • Relación bidireccional entre diferentes tipos de contenido con ACFRelación bidireccional entre diferentes tipos de contenido con ACF
  • Creación dinámica de Custom Post Types en WordPressCreación dinámica de Custom Post Types en WordPress
  • Mostrar / ocultar bloques Gutenberg para usuarios registrados o visitantesMostrar / ocultar bloques Gutenberg para usuarios registrados o visitantes
  • Borrar tablas wp_actionscheduler_actions y wp_actionscheduler_logsBorrar tablas wp_actionscheduler_actions y wp_actionscheduler_logs
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/

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

*

* Gravatar habilitado

Barra lateral principal

Presentación

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

Jooble
Alojamiento Wordpress

Niveles

Básico Intermedio Avanzado

Etiquetas

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

Populares

Mostrar categorías y etiquetas en lista de productos WooCommerce

Cambiar comillas («») en WordPress

Mostrar el nombre de usuario en el menú de WordPress

Agregar búsqueda en un menú de WordPress

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