Por que o is_page não está funcionando quando eu o coloco no arquivo functions.php?

10

Eu tenho uma página chamada "Apple", o ID de identificação da página 2533.

No arquivo page.php eu tenho uma linha:

echo $bannerimg 

E esta função em functions.php:

if ( is_page( '2533' ) ) {    
    // also tested with 'Apple'
    $bannerimg = 'apple.jpg';

} elseif ( is_page( 'test' ) ) {    
    $bannerimg = 'test.jpg';

} elseif ( is_page( 'admissions' ) ) { 
    $bannerimg = 'admissions.jpg';

} else { 
    $bannerimg = 'home.jpg';
}  

O ponto é o $ bannerimg ecoa "home.jpg" em todas as páginas, incluindo Apple, testes e admissões.

Eu até verifiquei todos os IDs usando the_ID & $ page- > ID. Nada. Então eu acho que tem algo errado com o código acima?

    
por Wordpressor 29.06.2011 / 10:35

6 respostas

15

functions.php é processado antes que você possa saber qual página está sendo carregada. Em vez de atribuir valor à variável, coloque seu código em função e use essa função em page.php template.

    
por Rarst 29.06.2011 / 10:41
4

Estendendo o que o @Rarst postou e você comentou, uma solução mais elegante seria criar seu próprio filtro dentro de page.php e ligar a ele de uma função dentro do functions.php, por exemplo:

em você page.php

$bannerimg = apply_filters('my_bannerimg','defualt_img.jpg');

e nas suas funções.php

add_filter('my_bannerimg','what_page_is_it');

function what_page_is_it($img){
    if ( is_page( '2533' ) ) {    
        return 'apple.jpg';
    } elseif ( is_page( 'test' ) ) {    
        return 'test.jpg';
    } elseif ( is_page( 'admissions' ) ) { 
        return 'admissions.jpg';
    } else { 
        return 'home.jpg';
    }  
}
    
por Bainternet 29.06.2011 / 11:24
4

get_header deve funcionar se você quiser deixá-lo em functions.php

add_action('get_header', function() {
    if ( is_page( '2533' ) ) {    
    // also tested with 'Apple'
        $bannerimg = 'apple.jpg';

    } elseif ( is_page( 'test' ) ) {    
        $bannerimg = 'test.jpg';

    } elseif ( is_page( 'admissions' ) ) { 
        $bannerimg = 'admissions.jpg';

    } else { 
        $bannerimg = 'home.jpg';
    }  
});
    
por Bryan Willis 06.03.2016 / 03:17
1

Adicione isto ao seu functions.php, altere o nome do script someCode e o nome da página:

   add_action('wp_enqueue_scripts', 'wpt_theme_js');

    function wpt_theme_js() { 
        if ( is_page('somePage') ) {
            wp_enqueue_script('someCode_js', get_template_directory_uri() . '/js/someCode.js', '', '', true);
        }
    }
    
por Vasyl Gutnyk 12.05.2017 / 20:02
0

Você precisa chamar sua função em um ponto no processo do WordPress depois que a Consulta estiver configurada .

Em functions.php :

function mytheme_get_banner_img() {
    if ( is_page( '2533' ) ) {    
        // also tested with 'Apple'
        $bannerimg = 'apple.jpg';

    } elseif ( is_page( 'test' ) ) {    
        $bannerimg = 'test.jpg';

    } elseif ( is_page( 'admissions' ) ) { 
        $bannerimg = 'admissions.jpg';

    } else { 
        $bannerimg = 'home.jpg';
    }  
    return $bannerimg;
}

Em seguida, no seu arquivo de modelo page.php , sempre que você precisar retornar / saída $bannerimg :

<?php
$bannerimg = mytheme_get_banner_img();
?>

Depois, você pode fazer o que precisar com $bannerimg : soltá-lo em uma tag <img> , etc.

    
por Chip Bennett 29.06.2011 / 15:11
0

Você declarou corretamente wp_head(); etc no seu tema?

Além disso, is_page aceita um ID sem aspas.

O problema também pode estar relacionado ao fato de você já estar no modelo de página, portanto, é uma página, talvez seja melhor consultar o $post->ID ou configurar page-apple.php

    
por Alex Older 29.06.2011 / 11:38