¿Cómo crear un shortcode para WordPress?

Un shortcode nos permite crear un fragmento de código que podemos invocar desde cualquiera lado, con una sintaxis muy simple.

 

Ejemplo código:

if(!function_exists('funcion_shortcode'))
{
      function funcion_shortcode(){
              
          
         return "ok";
   
         
      }

      add_shortcode('mi_shortcode', 'funcion_shortcode');
}

Ejemplo invocación:

[mi_shortcode]

Método add_shortcode()

Recibe 2 parametros el primero hace referencia al tag o nombre con el cual invocaremos a ese shortcode y el segundo a la función que lo invoca.

 

Pasando parámetros a un shortcode

if(!function_exists('funcion_shortcode'))
{
      function funcion_shortcode($atts){
              
                $a = shortcode_atts( array(
                    'link'     => '',
                    'text'     => '', 
           

                 ), $atts );

              ?>
                  <a href="<?php echo $a['link']; ?>" ><?php echo $a['text']; ?></a>
              <?php
         
      }

      add_shortcode('mi_shortcode', 'funcion_shortcode');
}


Ejemplo invocación:

[mi_shortcode link="https://www.upiicsafordummies.com" text="visitar"]

En el ejemplo anterior podemos observar como la función recibe un array de parámetros, los cuales pueden estar inicilizados, y en tu llamado al shortcode puedes sobreescribir esos valores.

 

 

Creando un shortcode para filtrar notas por category

 

if(!function_exists('dummies_filter_post'))
{
      function dummies_filter_post($atts){
              
                $a = shortcode_atts( array(
                    'number_post' => '3',
                    'category'    => null
                ), $atts );
    


                $the_query = new WP_Query( array(
                                   'post_count'    => $a['number_post'],
                                   'category_name' => $a['category'], 
                                   'size_image'    => $a['thumnail'] ));     

            ?>
         
                <?php if ( $the_query->have_posts() ) : ?>

                <!-- pagination here -->

                <!-- the loop -->
                <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
  

                    <div class="grid-33 tablet-grid-50 mobile-grid-100">
                        <?php
                              if ( has_post_thumbnail() ) {
                                the_post_thumbnail('medium', array('class' => 'img-responsive'));
                              } 
                                 
                        ?>

   
                       <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
                        
                    </div>
                         
  
  
                <?php endwhile; ?>
                <!-- end of the loop -->

                <!-- pagination here -->

                <?php wp_reset_postdata(); ?>

                <?php else : ?>
                <p><?php esc_html_e( 'Sorry, no posts matched your criteria.' ); ?></p>
                <?php endif; ?>

        <?php        
         
      }

      add_shortcode('filter_post', 'dummies_filter_post');
}

El código anterior permite filtrar notas por  categoria, las clases css pueden variar segun el tema, en este caso es GeneratePress.

 

Ejemplo invocación: