1. Code
  2. WordPress
  3. Theme Development

Desarrollo de plugins para el 'framework' de tu tema WordPress

En la parte anterior de esta serie, exploré las formas en que puedes usar temas hijos para crear sitios usando tu 'framework' o  tu marco de trabajo de tema. En este tutorial, revisaré las ocasiones en las que, en lugar de eso, podrías crear plugins.
Scroll to top
This post is part of a series called How Theme Frameworks Actually Work.
Creating Child Themes for Your WordPress Theme Framework

Spanish (Español) translation by Eva Collados Pascual (you can also view the original English article)

En la parte anterior de esta serie, exploré las formas en que puedes usar temas hijos para crear sitios usando tu 'framework' o  tu marco de trabajo de tema. En este tutorial, revisaré las ocasiones en las que, en lugar de eso, podrías crear plugins.

Decidir cuándo crear un plugin

A veces puede ser difícil decidir si usar un plugin o el archivo functions.php de tu tema hijo cuando quieres añadir funcionalidad a un sitio que está utilizando tu framework.

Al decidir qué hacer, me haría algunas preguntas, tal como se documenta en esta infografía:

Esto te ayudará a decidir si debes usar el archivo de funciones de tu tema hijo o tema principal, un plugin o tu tema hijo base.

Si la funcionalidad que estás agregando añade mucho código, puede ser útil para otras personas, o se utilizará en otros sitios que vayas a desarrollar, aunque no en todos, generalmente la mejor idea sea escribir un plugin.

Crear tus plugins

Si has decidido que necesitas un plugin, entonces puedes hacer uso de los ganchos que hayas añadido a tu framework para hacerlos más potentes. Por ejemplo:

  • Si el plugin añade la funcionalidad de migas de pan, puedes enganchar su salida al gancho de acción wptp_above_content para mostrar una miga de pan o 'rastro de ruta de navegación' por encima del contenido en cada página.
  • Si tu plugin crea un campo de búsqueda más potente o relevante, puedes adjuntarlo a los ganchos de acción wptp_in_header o wptp_sidebar.
  • Un plugin que crea una caja de llamada a la acción (como la función en el último tutorial, sobre temas hijos), se adjuntaría a los ganchos wptp_sidebar o wptp_after_content.

¡La lista continúa!

Obviamente también habrá plugins que no hagan uso de los ganchos de tu framework, y que en cambio se activen a través de ganchos del núcleo de WordPress, pero tus propios ganchos te dan opciones adicionales.

Ejemplo de plugin de navegación

Un ejemplo es un plugin de navegación que creé para usar con mi propio framework. Este solo se activa en las páginas, y primero comprueba qué lugar ocupa la página actual dentro de la jerarquía. Si la página tiene páginas secundarias o principales, muestra la página de nivel superior en esa jerarquía con un listado de sus páginas secundarias, que te proporciona navegación local.

He utilizado esto en sitios de clientes y lo he conectado al gancho before_content o al gancho sidebar, y a veces a ambos, con etiquetas condicionales adicionales.

El plugin utiliza dos funciones: la primera, wptp_check_for_page_tree(), encuentra dónde está la página actual dentro del árbol jerárquico de las páginas:

1
function wptp_check_for_page_tree() {
2
3
    //start by checking if we're on a page

4
    if( is_page() ) {
5
	
6
	    global $post;
7
	
8
	    // next check if the page has parents

9
	    if ( $post->post_parent ) {
10
		
11
		    // fetch the list of ancestors

12
		    $parents = array_reverse( get_post_ancestors( $post->ID ) );
13
			
14
		    // get the top level ancestor

15
		    return $parents[0];
16
			
17
		}
18
		
19
		// return the id  - this will be the topmost ancestor if there is one, or the current page if not

20
		return $post->ID;
21
		
22
	}
23
24
}

El siguiente, wptp_list_subpages(), comprueba si estamos en una página (pero no en la página de inicio), luego ejecuta la función wptp_check_for_page_tree() y, en función de su resultado, genera la lista de páginas:

1
function wptp_list_subpages() {
2
3
    // don't run on the main blog page

4
    if ( is_page() && ! is_home() ) {
5
6
	    // run the wptp_check_for_page_tree function to fetch top level page

7
	    $ancestor = wptp_check_for_page_tree();
8
9
	    // set the arguments for children of the ancestor page

10
	    $args = array(
11
		    'child_of' => $ancestor,
12
		    'depth' => '-1',
13
		    'title_li' => '',
14
	    );
15
		
16
	    // set a value for get_pages to check if it's empty

17
	    $list_pages = get_pages( $args );
18
		
19
	    // check if $list_pages has values

20
	    if ( $list_pages ) {
21
22
		    // open a list with the ancestor page at the top

23
			?>
24
		    <ul class="page-tree">
25
			    <?php // list ancestor page ?>

26
			    <li class="ancestor">
27
				    <a href="<?php echo get_permalink( $ancestor ); ?>"><?php echo get_the_title( $ancestor ); ?></a>
28
			    </li>
29
30
			    <?php
31
			    // use wp_list_pages to list subpages of ancestor or current page

32
			    wp_list_pages( $args );;
33
			
34
			    // close the page-tree list

35
			    ?>
36
			</ul>
37
38
		<?php
39
		}
40
	}
41
42
}

Después de haber instalado y activado el plugin, tendrías que activarlo en tu tema hijo, algo que haces añadiendo lo siguiente al archivo functions.php:

1
add_action( 'wptp_sidebar', 'wptp_list_subpages' );

Por supuesto, podrías usar un gancho de acción diferente si deseas generar la lista en otro lugar.

Resumen

Los plugins son otra parte del ecosistema que creas como parte de tu marco de trabajo. Puedes crear plugins que estén específicamente diseñados para ser activados a través de los ganchos que hayas añadido en tu marco de trabajo, como he demostrado anteriormente.

Sin embargo, vale la pena pasar algún tiempo antes de escribir un plugin para identificar si eso sería lo correcto: si tienes dudas, consulta la anterior infografía en este artículo para que te ayude a decidir.