क्या 404 तर्क को बदलने वाले कोई हुक हैं?


27

बशर्ते आपके पास अपने विषय में परिभाषित 404 पृष्ठ हो, यदि Word टैग को $ wp_query-> query_vars में परिभाषित किया गया है, तो 404 पृष्ठ प्रदर्शित होगा और उस टैग से मेल खाते कोई पोस्ट नहीं हैं।

मैं एक प्लगइन लिख रहा हूं जो पोस्ट के अलावा प्रत्येक पृष्ठ पर कुछ जानकारी प्रदर्शित करता है। मैं 404 लॉजिक को बदलना चाहूंगा ताकि 404 पेज प्रदर्शित हो जाए यदि कोई टैग से मेल खाते पोस्ट नहीं हैं और प्लगइन उस टैग से मेल खाते हुए डेटा को खींच नहीं सकता है। यदि प्लगइन डेटा पा सकता है, तो मैं एक सामान्य पृष्ठ दिखाना चाहूंगा, भले ही उस पृष्ठ पर पोस्ट हों या नहीं ...

मैं Googling, कोड पढ़ रहा हूं, कोडेक्स पढ़ रहा हूं, और इधर-उधर ताक रहा हूं, और यह पता लगाने में सक्षम नहीं है कि Wordpress कहां से 404 चलाता है, और मैं इसे कैसे ओवरराइड कर सकता हूं। (मुझे ऐसा महसूस हो रहा है कि यह functions.php में status_header () के साथ कुछ करने के लिए हो सकता है, लेकिन यह स्पष्ट नहीं है कि मुझे कैसे और कब इसमें हुक करने की आवश्यकता है)।

किसी भी मदद / विचारों / ज्ञान की सराहना की।

धन्यवाद,

~ पात

जवाबों:


29

कोड और Googling के माध्यम से कुछ और स्लोगन के बाद, मुझे उत्तर मिला। यह इस थ्रेड में निहित है (ओटो 42 की पोस्ट देखें), लेकिन रिकॉर्ड के लिए, अपने प्लगइन में निम्नलिखित जोड़ने से आपके द्वारा निर्दिष्ट शर्तों के लिए 404 हैंडलिंग को ओवरराइड किया जाएगा:

add_filter('template_redirect', 'my_404_override' );
function my_404_override() {
    global $wp_query;

    if (<some condition is met>) {
        status_header( 200 );
        $wp_query->is_404=false;
    }
}

ध्यान दें कि पीएचपी आउटपुट हेडर से पहले आपको "is_404" को झूठे सेट करने की आवश्यकता है, यही कारण है कि इसे template_redirect तर्क में हुक करना एक अच्छा विचार है।

~ पात


5

मुझे एक कस्टम प्रोजेक्ट के लिए ऐसा करने की आवश्यकता थी जहां हमेशा एक 200 पृष्ठ था, और पाया कि आप इसे केवल अपने टेम्पलेट फ़ाइल के ऊपर (get_header () से ऊपर) जोड़ सकते हैं;

global $wp_query;
status_header( 200 );
$wp_query->is_404=false;

1
महान! इसने मेरे लिए काम किया। मैं अपनी स्क्रिप्ट बना रहा था और इसने 404 उत्पन्न किया। मैंने wp-> मुख्य से रननिग स्क्रिप्ट की कोशिश की, लेकिन यह एक पूर्ण स्वच्छ समाधान नहीं था। यह मेरे लिए काम किया:// configuration require('./wp-load.php'); // init WP (inits objects, language and stuff). wp(); // fix title (this is not 404) $wp_query->is_404 = false; // doesn't fix the actual 404 status status_header( 200 ); // but this does :-)
Nux

1

404.phpअपनी थीम में टेम्प्लेट फ़ाइल बनाएं और आवश्यकतानुसार (अपना प्लगइन आउटपुट या जो भी हो) जोड़ें। आप अपने विषय में परिभाषित उल्लेख करते हैं , आपके लिए इस दृष्टिकोण के साथ क्या गलत है?

कोडेक्स एक त्रुटि 404 पेज बनाना


मैं जो देख रहा हूं, वह उन परिस्थितियों को बदलने का एक तरीका है जिसके तहत 404 पृष्ठ ट्रिगर हो जाते हैं। अभी, यदि Wordpress क्वेरी चर में एक टैग से मेल खाते किसी भी पोस्ट को नहीं पा सकता है, तो 404 पृष्ठ दिखाई देता है। मैं कुछ अतिरिक्त कोड को छोड़ना चाहता हूं जो 404 पृष्ठ को सुनिश्चित करता है कि अगर Wordpress कोई पोस्ट नहीं पा सकता है और मेरा प्लगइन प्रदर्शित करने के लिए कोई पूरक जानकारी नहीं पा सकता है।
पैच

विज़िटर के लिए 404 का उद्देश्य लिंक को जानना गलत है और आपके लिए इसे लॉग इन करना और ठीक करना (यदि आवश्यक हो)। आप आगंतुक को न तो यह बताना चाहते हैं कि वह टूटी हुई कड़ी का उपयोग कर रहा है या अपने बारे में जागरूक है। 404 पर जानकारी प्रदर्शित करना ठीक काम करता है, इसे हाइजैक करना कोई आवश्यकता नहीं है, इसलिए परेशान क्यों हो? बस अपने तर्क और / या तकनीकी को समझने की कोशिश कर रहा है।
रार्स्ट

1
मैं जिस चीज की तलाश कर रहा था, वह इस बात की परिभाषा बदलने का एक तरीका था कि कौन से पृष्ठ "गलत" हैं। मैं जिस साइट का निर्माण कर रहा हूं उसमें एक ब्लॉग घटक है, लेकिन वह सभी साइट नहीं है। मैं Wordpress पोस्ट का उपयोग करने के लिए Wordpress टैग का उपयोग कर रहा हूं, और प्लगइन के माध्यम से अतिरिक्त सामग्री खींच रहा हूं। मैं 200 स्टेटस कोड वापस करना चाहता हूं यदि या तो क) पोस्ट हैं या बी) मेरे प्लगइन को टैग से मिलान करने के लिए सामान मिल सकता है। इस प्रकार तर्क को फिर से प्रकाशित करने की आवश्यकता है। भले ही, आपको उत्तर लिखने के लिए समय निकालने के लिए धन्यवाद - खेद है कि मेरी समस्या अजीब थी और अधिक सम्मिलित उत्तर की आवश्यकता थी :-)
पैच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.