Enganchar los comentarios de WordPress a the_content con prioridad

Un problema que se puede dar en según qué ocasión con WordPress es la posición de la caja de comentarios.

En un proyecto concreto no teníamos los comentarios visibles, sino que era un botón que funcionaba como disparador y se mostraban al pulsar en él.

El caso es que, con tanto plugin que engancha cosas al filtro the_content, los comentarios aparecían demasiado abajo en la página, por lo que perdía interacción.

Una forma de solucionar esto era enganchar los comentarios a the_content igual que hacen los demás plugins y así poder jugar con la prioridad de ejecución.

El código

/**
 * Adds comments just before content, nothing between them
 */
add_filter( 'the_content', 'bf_comments_content', 10);
function bf_comments_content( $content) {
	if( is_single() && comments_open() ) {
		ob_start();
		comments_template();
		$comments = ob_get_contents();
		ob_end_clean();

		return $content . $comments;
	}
	else {
		return $content;
	}
}
Lenguaje del código: PHP (php)

El funcionamiento, en realidad, es bastante simple.

Primero enganchamos la función bf_comments_content al filtro the_content (para que lo ejecute después de llamar al contenido), utilizando add_filter (ver referencia para entender cómo funciona la prioridad).

La función comprueba que estamos visualizando la plantilla del single (la utilizada para las entradas de WordPress) y que los comentarios están abiertos para dicha entrada.

Hacemos uso de ob_start, que en resumidas cuentas almacena en búfer todo lo que ejecutemos a continuación; en nuestro caso la llamada a comments_template() que imprime los comentarios y toda su funcionalidad.

Recogemos el contenido de esa llamada a comments_template() en una variable con ob_get_contents(), limpiamos el buffer y devolvemos el contenido de la variable concatenado al contenido original.

Bastante fácil, ¿verdad?

Como digo, la utilidad reside en poder utilizar prioridad sobre el orden de ejecución de, por ejemplo, todos los plugins que inyectan contenidos en el filtro the_content.

Si te ha resultado útil, no dudes en compartirlo y dejar un comentario. Si conoces un sistema mejor, también te agradezco un comentario.

¡MANTENME INFORMADO!

¡Gracias por tu interés en estar informado del próximo lanzamiento de mis cursos! 😎

¡No hago spam! Lee la política de privacidad para tener más información.

2 comentarios en “Enganchar los comentarios de WordPress a the_content con prioridad

    1. Hola, ¡Pruébalo!

      ob_start crea un buffer a la salida de php; es decir, todo lo que se «ejecute» en php pasará por este buffer y lo podrás «imprimir» (u otras tareas).

      Si lo pruebas, verás que no funciona sin el ob_start.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

DARÍO BALBONTÍN FERNÁNDEZ es el Responsable del tratamiento de los datos personales del usuario y le informa que estos datos serán tratados de conformidad con lo dispuesto en el Reglamento (UE) 2016/679 de 27 de abril (GDPR) y la Ley Orgánica 3/2018 de 5 de diciembre (LOPDGDD), por lo que se le facilita la siguiente información del tratamiento: Fin del tratamiento: mantener una relación comercial y el envío de comunicaciones sobre nuestros productos y servicios. Criterios de conservación de los datos: se conservarán mientras exista un interés mutuo para mantener el fin del tratamiento y cuando ya no sea necesario para tal fin, se suprimirán con medidas de seguridad adecuadas para garantizar la seudonimización de los datos o la destrucción total de los mismos.Comunicación de los datos: No se comunicarán los datos a terceros, salvo obligación legal. Derechos que asisten al usuario: Derecho a retirar el consentimiento en cualquier momento. Derecho de acceso, rectificación, portabilidad y supresión de sus datos y a la limitación u oposición al su tratamiento. Derecho a presentar una reclamación ante la Autoridad de control (agpd.es) si considera que el tratamiento no se ajusta a la normativa vigente. Datos de contacto para ejercer sus derechos: contacto@dariobf.com.