Tutorial — Dynamic Content

1–2 minutos

Lectura

·

La clase Dynamic_Content pertenece al plugin Blocko y permite cargar contenido dinámico mediante AJAX usando Gutenberg.

Este sistema permite cargar contenido dinámico usando:

  • Post ID
  • Template Parts Gutenberg
  • Contextos personalizados
Data AttributeFunción
data-content-idID del post que será cargado dinámicamente
data-content-typeTipo de interfaz a mostrar: modal u offcanvas
data-contextContexto personalizado utilizado para identificar qué contenido renderizar

1. Botón Block Gutenberg frontend llamando a un template part

<!-- wp:buttons -->
<div class="wp-block-buttons"><!-- wp:button {"dataAttributes":[{"key":"content-type","value":"modal"},{"key":"context","value":"product-card"}]} -->
<div class="wp-block-button"><a class="wp-block-button__link wp-element-button">Abrir Card</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons -->

2. Botón HTML frontend llamando a un ID Post

<button
	data-content-id="15"
	data-content-type="modal">

	Abrir producto

</button>

3. Botón HTML frontend llamando a un template part

<button
	data-content-type="modal"
	data-context="product-card">

	Quick View

</button>

Crear Template Part Gutenberg

Renderizar Template Part dinámicamente

add_filter(
	'dynamic_content/render',
	function($html, $args) {

		if ($args['context'] !== 'product-card') {
			return $html;
		}

        global $post;

		$GLOBALS['post'] = $post;

		setup_postdata($post);

		ob_start();

		echo do_blocks('
			<!-- wp:template-part {
				"slug":"card"
			} /-->
		');

		wp_reset_postdata();

		return ob_get_clean();

	},
	20,
	2
);

Ejemplo usando múltiples template parts

add_filter(
	'dynamic_content/render',
	function($html, $args) {

		global $post;

		$GLOBALS['post'] = $post;

		setup_postdata($post);

		ob_start();

		switch ($args['context']) {

			case 'product-card':

				echo do_blocks('
					<!-- wp:template-part {
						"slug":"product-card"
					} /-->
				');

			break;

			case 'team-member':

				echo do_blocks('
					<!-- wp:template-part {
						"slug":"team-member",
						"theme":"vanta-child"
					} /-->
				');

			break;

		}

		wp_reset_postdata();

		return ob_get_clean();

	},
	20,
	2
);

Deja una respuesta

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

La parte de la plantilla ha sido borrada o no está disponible: offcanvas-nav