Diferencia entre is_page(), is_single(), is_singular() y posibles usos.

Aviso a navegantes

Posiblemente esta entrada se encuentre desactualizada, ya que hace mucho tiempo que se escribió. Sigue publicada aquí a modo de legado. 

En este post voy a tratar estas tres funciones de WordPress aunque el tema se irá abriendo y surgirán más funciones y más dudas que iremos resolviendo poco a poco en otros post.


El principal uso que yo le doy a estas funciones es el de visualizar contenido dependiendo de en qué página o post me encuentre.

Empezamos con lo básico, vamos al codex y y leemos lo que se dice que cada uno de las funciones, esto a veces es un coñazo ya que esta en inglés, no sabemos mucho de php, y tampoco sabemos para que mierda sirve.

Las tres funciones, devuelven como parámetro un booleano, es decir o te devuelven un TRUE o un FALSE, o lo que lo mismo, SI o un NO, para que nos entendamos. A continuación veremos a que preguntas contestan.

Enlaces al codex de WordPress para cada función:

is_page()

¿Soy una página?

Si usamos la función tal cual y sin parámetros, la función devuelve TRUE, si la página en cuestión es una página y FALSE si no.

is_page( int|string|array $page = '' );

Lo primero que podemos comprobar es que acepta 3 posibles parámetros, int, string o array, en otro post entraremos en detalles en los tipos de parámetros básicos y en cómo leer el codex.

Veamos más ejemplos de uso de la función is_page()

// Cuando esta siendo visualizada una página.
is_page();

// Cuando la página con ID=42 es igual a true.
is_page( 42 );

// Cuando la página con el valor 'post_title' igual a "Contact" esta siendo visualizada.
is_page( 'Contact' );

// Cuando la página con 'post_name' (slug)(permalink) de  "about-me" es la selecionada.
is_page( 'about-me' );

/*
 * Este caso usa un array y mezcla todas las anteriores,
 * Devuelve true cuando están siendo visualizadas ID=42 o 
 * about-me o Contact
 * Note: la versión con array fuera liberada en la versión 2.5.
 */
is_page( array( 42, 'about-me', 'Contact' ) );

is_single()

¿Soy una un post?

is_single( int|string|array $post = '' );
// Se activa cuando cualquier post esta siendo visualizado.
is_single();

// Cuando el post con ID=17 es el seleccionado.
is_single('17');

 // También funciona con un 'integer'
is_single(17);

// Se activada cuando el post_title es 'Irish stew'
is_single('Irish Stew');

 // Es true cuando el slug/url/permalink es 'beef-stew'
is_single('beef-stew');

/*
*  También funciona con la versión array
*  Nota: La funcionalidad del array 
*  fue añadida en la versión 2.5.
*/
is_single(array(17,'beef-stew','Irish Stew'));

is_singular()

¿Soy un post, ok, pero además de que tipo de post soy?

is_singular( string|array $post_types = '' );

Tipos de ‘post type’.

  • Post (Post Type: ‘post’)
  • Page (Post Type: ‘page’)
  • Attachment (Post Type: ‘attachment’)
  • Revision (Post Type: ‘revision’)
  • Navigation Menu (Post Type: ‘nav_menu_item’)
  • Custom CSS (Post Type: ‘custom_css’)
  • Changesets (Post Type: ‘customize_changeset’)
  • User Data Request (Post Type: ‘user_request’ )

Podemos usar la función is_singular() para saber cuando se esta visualizando cualquier tipo de entrada, incluidas entradas creadas como podría ser un portfolio, libro, producto de WooCommerce, etc

Aquí os dejo algunos ejemplos del uso de is_singular()

// Se activa tanto para 'post' como para 'page'.
is_singular();

// Verdad cuando el elemento visualizado es del tipo 'book'
is_singular( 'book' );


// También cuenta con la posibilidad de usar array.
is_singular( array( 'newspaper', 'book' ) );

Posibles usos prácticos para estas funciones

Función is_single() para customizar el footer dependiendo de la página en la que te encuentres.

Añadir una página en WordPress directamente en HTML.

Ponemos el caso de que tengamos una página escrita en html y queremos añadirla directamente a WordPress, para ello:

  • Creamos la página, por ejemplo: ‘landing-page’
  • No escribimos contenido en la página.
  • Añadimos el siguiente código en el archivo functions.php
if ( is_page('landing-page'))  { 
    echo 'include_once(get_stylesheet_directory() . '/templates/landing.html');'; 
}

Combinarlo con Hooks en Genesis Framework

add_action('genesis_loop','custom_pages');
function custom_pages(){
        if ( is_page('about-us')) {  
     //El include es cómodo porque te permite tener 
     //el archivo html por separado. 
            include_once(get_stylesheet_directory() . '/templates/footer.html');
    //Pero podría ser de esta forma también.
    echo '<footer class="my-footer"> El contenido de tu footer </footer>';

       }
}

Añadir un estilo específicamente a los post

Con este código en functions.php consigues añadir cualquier estilo a los post, o cualquier script, lo que quieras incluir.

if ( is_single() ) {
    // javascript
    wp_enqueue_script( 'fitvids', get_stylesheet_directory_uri() . '/js/jquery.fitvids.js', array( 'jquery' ), '1.1', true );
 // css
    wp_enqueue_style('boostrap-4-grid-system', get_stylesheet_directory_uri() . '/css/boostrap-grid.css');
}

Esto funciona bien cuando queremos enfocarnos en páginas y post pero cuando queremos llegar a la página del blog o a la front page, usamos las siguientes funciones.

Para la página del blog is_home()

Para la portada o front page puedes usar is_front_page()

WordPress provides a slew of other tags as well includingbas

WordPress tiene bastantes funciones para estos usos y así saber donde te encuentras en cada momento:

is_home(), is_front_page(), is_search(), is_404(), is_singular(), is_page(), is_attachment(), is_local_attachment(), is_single(), is_sticky(), is_archive(), is_category(), is_tag(), is_author(), is_date(), is_year(), is_month(), is_day(), is_time(), is_admin(), is_preview(), is_paged(), is_page_template(), is plugin active(), is_plugin_page(), is_new_day(), is_feed(), is_trackback(), is_comments_popup(), comments_open(), pings_open(), is_taxonomy(), is_taxonomy_hierarchical(), is_term(), is_user_logged_in(), is_blog_installed(), is_active_sidebar(), is_dynamic_sidebar(), is_active_widget()

Como puedes comprobar, puedes especificar bastante, así que puedes probar algo en tu código y ver cómo va.

Si te surgen dudas o comentarios leyendo el post, comenta para que puede ayudar a más gente como tú.

Comparte si te apetece.
Twitter
LinkedIn
Email

Te cuento mi experiencia sobre SEO, marketing digital y otras aventuras digitales en esta newsletter. Suscribirse es gratis y puedes darte de baja cuando quieras. No envío nada que no leería yo mismo como usuario.

Memoji Rafaelcosquiere
Sobre el autor

Hola, soy Rafael Cosquiere, llevo dedicandome al marketing digital y SEO desde hace más de 6 años, aunque hago un poco de todo: WordPress + Elementor, Python, Linux, Automatizaciones y Ciberseguridad entre otros. 100% ADN autodidacta.