मुझे पता कैसे चलेगा कि वर्तमान पोस्ट प्रकार एडमिन में पोस्ट.फ पी पर है?


11

Im एक admin_init हुक के साथ कुछ करने की कोशिश कर रहा है अगर - और केवल अगर - उपयोगकर्ता पोस्ट पोस्ट (post.php) को "टाइप" इवेंट के साथ संपादित कर रहा है। मेरी समस्या यह है कि भले ही वर्डप्रेस एक वैश्विक वैरिएबल को $ post_type कहता है। यदि मैं करता हूँ:

global $post_type;
var_dump($post_type);

यह NULL को लौटाता है।

लेकिन अगर मैं ऐसा करता हूं:

global $pagenow;
var_dump($pagenow);

यह मेरा वर्तमान पृष्ठ लौटाता है। यानी "पोस्ट। एफपी"।

मैंने इस समारोह में देखा, $screen = get_current_screen();लेकिन जब तक admin_init हुक नहीं चला, और तब तक देर हो चुकी थी, तब तक इसे घोषित नहीं किया गया।

तो मेरा प्रश्न है, मैं कैसे करूँ, जब तक admin_init चला जाता है, पता करें कि वर्तमान पोस्ट किस प्रकार संपादित की जा रही है। अगर url है post.php?post=81&action=edit, तो मुझे कैसे पता चलेगा कि पोस्ट टाइप postid = 81 क्या है?

धन्यवाद Malthe


किस बारे में global $post?
सिसिर

वैश्विक पोस्ट अभी तक admin_init हुक में उपलब्ध नहीं है
Malibur

जवाबों:


21
add_action( 'admin_init', 'do_something_152677' );
function do_something_152677 () {
    // Global object containing current admin page
    global $pagenow;

    // If current page is post.php and post isset than query for its post type 
    // if the post type is 'event' do something
    if ( 'post.php' === $pagenow && isset($_GET['post']) && 'post' === get_post_type( $_GET['post'] ) )
        // Do something
    }
}

किसी मौजूदा पोस्ट को संपादित करते समय url '
/wp-admin/post.php?post=81&action=edit

ठीक है अब तय ... भले ही आपको ऐसा करने की db क्वेरी करनी हो ...
MiCc83

1
कृपया यह बताएं कि आपका कोड क्या करता है
Pieter Goosen

2018 में भी एक बहुत ही उपयोगी जवाब!
LoicTheAztec

कोड केवल उत्तर बहुत उपयोगी नहीं हैं। ऊपर देखें @PieterGoosen का हंगामा, ~ 5 साल पहले से ....
random_user_name

0

मैं MiCc83 के उत्तर पर विस्तार करने जा रहा हूं। कुछ चीजें हैं जो ओपी के मूल सवालों का पालन नहीं करती हैं, लेकिन कुल मिलाकर यह एक महान समाधान है। उदाहरण के लिए, यह post_type घटना के साथ काम नहीं करेगा क्योंकि आप उत्तर में 'post' के रूप में post_type की जाँच कर रहे हैं।

add_action( 'admin_init', 'do_something_152677' );
function do_something_152677 () {
    // Global object containing current admin page
    global $pagenow;

    // If current page is post.php and post isset than query for its post type 
    if ( 'post.php' === $pagenow && isset($_GET['post']) ){
        $post_id = $_GET['post'];

        // Do something with $post_id. For example, you can get the full post object:
        $post = get_post($post_id);

    }
}

'post' === get_post_type( $_GET['post'] )पिछले उत्तर की स्थिति इसे पोस्ट प्रकार 'ईवेंट' पर काम करने से रोक देगी। आपको 'पोस्ट' के बजाय पोस्ट प्रकार 'ईवेंट' के लिए जांचना होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.