WordPress is_page() siempre regresa con falso

2 minutos de lectura

Estoy usando este código para agregar algunas cosas a las páginas de wordpress. Pero este código no funciona. es_pagina() siempre se devuelve con valor falso.

<?php
/**
 * Plugin Name: Name Of The Plugin
 * Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates
 * Description: A brief description of the Plugin.
 * Version: The Plugin's Version Number, e.g.: 1.0
 * Author: Name Of The Plugin Author
 * Author URI: http://URI_Of_The_Plugin_Author
 * License: A "Slug" license name e.g. GPL2
 */
add_action("init", "only_pages");

function only_pages(){
    if(!is_admin()){
        if(is_page()){
            // Do something here...
        }
    }
}

Por favor, ayúdame.

  • ¿Has probado is_page(‘pagename’) ? ?

    – Zeeshan

    20 de febrero de 2014 a las 5:26

  • Sí, usado. Pero no funciona… 🙁

    usuario3087089

    20 de febrero de 2014 a las 5:29

  • is_page() es en realidad $wp_query->is_page(), por lo que si var_dump $wp_query puede ver qué se valoriza y qué no en el inicio

    – Adriano GV Espósito

    17 de diciembre de 2019 a las 9:56

Ok.. aquí está la solución. En lugar de usar action hook init, usa wp action hook.

    /*
 * Plugin Name: Page Test
 */

add_action("wp", "only_pages");

function only_pages(){
    if(!is_admin()){
        wp_reset_query();
        if(is_page()){
            echo 'I am single page';
        }
        else{
            echo 'I am not single page';
        }
    }
}

Esto funciona bien. Espero que esto ayude.

  • Me acabas de salvar después de 3 horas de intentarlo. Este comportamiento debe explicarse en algún lugar del sitio web de WordPress.

    – Chris

    18 de abril de 2017 a las 14:22

  • Y si lo necesitas antes, parse_query es el gancho más antiguo donde is_page() trabajará

    –Lucas Bustamante

    13 de enero de 2020 a las 19:58


Bueno, supongo que si no funciona, podrías tomar el $wpdb objeto y comprobar el post_type

function only_pages(){
     global $wpdb;
     if(!is_admin() & $wpdb->post_type == 'page'):
         //Do something here
     endif;
}

  • $wpdb->post_type devuelto con nulo

    usuario3087089

    20 de febrero de 2014 a las 5:41

is_page();
// When any single Page is being displayed.

is_page( 42 );
// When Page 42 (ID) is being displayed.

is_page( 'Contact' );
// When the Page with a post_title of "Contact" is being displayed.

is_page( 'about-me' );
// When the Page with a post_name (slug) of "about-me" is being displayed.

is_page( array( 42, 'about-me', 'Contact' ) );
// Returns true when the Pages displayed is either post ID 42, or post_name "about-me", or post_title "Contact".  Note: the array ability was added at Version 2.5.

Referencia

Pruebe un enfoque alternativo. En cada página hay una clase llamada “página” en el cuerpo css. Entonces puedes apuntar a esta clase:

    $classes = get_body_class();
    if (in_array('page',$classes)) {
        // Do something
    }

¿Ha sido útil esta solución?