जब मैं इसे functions.php फ़ाइल में रखता हूँ तो is_page काम क्यों नहीं कर रहा है?


11

मेरे पास पृष्ठ "Apple" है, पृष्ठ का आईडी आईडी 2533 है।

Page.php फ़ाइल में मेरे पास लाइन है:

echo $bannerimg 

और फ़ंक्शन में यह फ़ंक्शन ।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';
}  

बिंदु Apple, परीक्षण और प्रवेश सहित हर पृष्ठ पर $ बैनरआईजी "होम.जेपीजी" है।

मैंने the_ID और $ पृष्ठ-> ID का उपयोग करके सभी आईडी को भी चेक किया है। कुछ भी तो नहीं। तो मुझे लगता है कि ऊपर दिए गए कोड में कुछ गड़बड़ है?


निम्नलिखित सूत्र में एक समाधान ने मुझे इसी तरह के मुद्दे को हल करने में मदद की: wordpress.stackexchange.com/questions/225359/…
Lefan

जवाबों:


16

functions.phpइससे पहले कि आप यह जान सकें कि किस पेज को लोड किया जा रहा है। चर को मान देने के बजाय अपने कोड को फ़ंक्शन में रखें और उस फ़ंक्शन को page.phpटेम्पलेट में उपयोग करें।


मैंने इस कोड के साथ एक फ़ंक्शन के अंदर भी कोशिश की है, लेकिन ऐसा लगता है कि यह कुछ भी नहीं लौटाता है। मुझे पता है कि यह सब पेज में डालना चाहिए। एफपी को मदद करनी चाहिए, लेकिन यह बहुत सुंदर नहीं है।
वर्डप्रेस

मैं पेज संदर्भ के लिए आईडी का उपयोग नहीं करता हूं, लेकिन कोडेक्स दिखाता है कि पृष्ठ की आईडी में एक भी उद्धरण नहीं है, क्या आपने कोशिश की है? 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
@ मर्टिन उद्धरण पूरी तरह से सही नहीं हैं, लेकिन यह या तो कुछ भी नहीं तोड़ेगा - यह डिफ़ॉल्ट रूप से तुलना के बिना शिथिल है (यदि प्रकार मिलान किए बिना)
रार्स्ट

यदि आप क्वेरी में फ़िल्टर जोड़ना चाहते हैं तो क्या होगा? आप टेम्पलेट में ऐसा नहीं कर सकते। लेकिन आप इसे या तो functions.php फ़ाइल में नहीं कर सकते हैं!
रेगी

@reggie क्यों नहीं? आपको शायद इसके बारे में नया सवाल पूछना चाहिए। :)
Rarst

6

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 ने जो पोस्ट किया और आपने टिप्पणी की, उसका एक अधिक सुरुचिपूर्ण समाधान पेज के अंदर अपना स्वयं का फ़िल्टर बनाना होगा। फ़ंक्शन के अंदर फ़ंक्शन से इसे करने के लिए पीपी और हुक करें। उदाहरण के लिए:

आप पृष्ठ में

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

और अपने कार्यों में

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

इसे अपने फ़ंक्शन में जोड़ें ।php, स्क्रिप्ट का नाम बदलें कुछ कोड और पृष्ठ का नाम:

   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

क्वेरी सेट होने के बाद आपको अपने फ़ंक्शन को वर्डप्रेस प्रक्रिया में एक बिंदु पर कॉल करने की आवश्यकता है ।

में 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बिना उद्धरण के एक आईडी स्वीकार करता है।

समस्या यह भी हो सकती है कि आप पहले से ही पृष्ठ टेम्पलेट पर हैं इसलिए यह एक पृष्ठ है, आप क्वेरी करना $post->IDया सेट अप करना बेहतर हो सकते हैंpage-apple.php


is_page()ID को पूर्णांक के रूप में भी स्वीकार कर सकते हैं
Bainternet

हाँ, लेकिन एक इंट को उद्धृत नहीं किया जाना चाहिए
एलेक्स वृद्ध

यह अजीब है, क्योंकि मुझे हर जगह उद्धरण दिखाई देते हैं: codex.wordpress.org/Conditional_Tags
वर्डप्रेस

और यह एक बुरा अभ्यास है।
एलेक्स ओल्ड

मैं मानता हूं, पूर्णांक को उद्धृत नहीं किया जाना चाहिए। लेकिन PHP किसी भी तरह से बुरा नहीं मानेगी।
रेगी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.