functions.php 파일에 is_page를 넣을 때 왜 작동하지 않습니까?


11

페이지 ID ID 2533 인 "Apple"이라는 페이지가 있습니다.

page.php 파일에는 다음 줄이 있습니다.

echo $bannerimg 

그리고 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';
}  

요점은 애플, 테스트 및 입학을 포함한 모든 페이지에서 $ bannerimg 에코 "home.jpg"입니다.

심지어 _ID & $ page-> ID를 사용하여 모든 ID를 확인했습니다. 아무것도. 위의 코드에 문제가 있다고 생각합니까?


다음 스레드의 솔루션으로 비슷한 문제를 해결하는 데 도움이되었습니다. wordpress.stackexchange.com/questions/225359/…
Lefan

답변:


16

functions.php로드중인 페이지를 알기 전에 처리됩니다. 변수에 값을 할당하는 대신 코드를 함수에 넣고 page.php템플릿 에서 해당 함수를 사용하십시오.


함수 내부 에서도이 코드를 사용해 보았지만 아무것도 반환하지 않는 것 같습니다. 나는 그것을 page.php에 넣는 것이 도움이되어야하지만 그렇게 우아하지는 않다는 것을 알고있다.
Wordpressor

나는 페이지 참조를 위해 id를 사용하지 않지만 코덱은 페이지의 id에 작은 따옴표가 없음을 보여줍니다. 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.아마 사건은 아니지만 한
번의

1
@Martin 따옴표는 완전히 정확하지는 않지만 아무 것도 깨지지 않습니다-기본적으로 느슨하게 비교됩니다 (유형이 일치하는지 확인하지 않음)
Rarst

쿼리에 필터를 추가하려면 어떻게합니까? 템플릿에서는 그렇게 할 수 없습니다. 그러나 functions.php 파일에서도 할 수 없습니다!
reggie

@ 레지 왜 안돼? 당신은 아마 그것에 대해 새로운 질문을해야합니다. :)
Rarst

5

get_header 당신이 그것을 남겨두고 싶다면 작동 해야 합니다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';
    }  
});

4

@Rarst가 게시하고 주석 처리 한 것을 확장하면보다 우아한 해결책은 page.php 내에 자체 필터를 만들고 functions.php 내부의 함수에서 필터에 연결하는 것입니다.

당신의 page.php

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

그리고 당신의 functions.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';
    }  
}

1

이것을 functions.php에 추가하고, 스크립트 이름 someCode와 페이지 이름을 변경하십시오.

   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);
        }
    }

0

쿼리를 설정 한 후 WordPress 프로세스의 특정 시점에서 함수를 호출해야 합니다 .

에서 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;
}

그런 다음 page.php템플릿 파일에서 반환 / 출력 해야하는 곳 $bannerimg:

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

그런 다음 필요한 모든 작업을 수행 할 수 있습니다 $bannerimg. <img>태그에 태그 등을 넣습니다 .


0

wp_head();테마에 올바르게 선언 했습니까 ?

또한 is_page따옴표없이 ID를 허용합니다.

문제는 이미 페이지 템플릿에 있기 때문에 페이지이므로 실제로 쿼리 $post->ID하거나 설정하는 것이 좋습니다.page-apple.php


is_page()ID도 정수로 받아 들일 수 있습니다
Bainternet

네, 그러나 int는 인용해서는 안됩니다
Alex Older

나는 사방에 따옴표를 볼 수 있기 때문, 이상하다 : codex.wordpress.org/Conditional_Tags
Wordpressor

그리고 그것은 나쁜 습관입니다.
Alex Older

정수를 인용해서는 안된다는 것에 동의합니다. 그러나 PHP는 어느 쪽도 상관하지 않습니다.
reggie
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.