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.