Wp-super cache से json को कैश कैसे करें


15

एक नई परियोजना में हम कस्टम सामग्री प्रकारों के लिए स्थिर HTML फ़ाइलों को बनाने के लिए wp-super-cache (क्लाइंट के पसंदीदा प्लगइन) का उपयोग कर रहे हैं। लेकिन हम यह पता लगाने की कोशिश कर रहे हैं कि क्या सब कुछ ठीक से कैच किया जा रहा है।

यह 2 भाग का प्रश्न है।

1) हमने जो थीम बनाई है, वह पेज टेम्पलेट्स को आउटपुट जक्सन के लिए उपयोग करती है जो कि अजाक्स कॉल के माध्यम से प्राप्त होती है। अर्थात। यदि आप पृष्ठ को हिट करते हैं: theurl.com/sample - आपको शुद्ध जसन मिलेगा। जबकि हर पृष्ठ और पोस्ट का एक गैर-जावास्क्रिप्ट संस्करण है, अजाक्स इस विषय के सामने के छोर को चलाता है। हमने इन फ़ाइलों में शीर्षलेख और पाद लेख को निकाल दिया है ताकि यह शुद्ध json हो, और हम यह पता लगाने की कोशिश कर रहे हैं कि यह निर्धारित कैसे किया जाए कि json कैश हो रहा है या नहीं। सिद्धांत रूप में डेटा को कैश किया जाएगा क्योंकि यह तकनीकी रूप से एक पेज है जिसे वर्डप्रेस द्वारा परोसा जाता है। लेकिन, अगर यह कैश किया जा रहा है तो हम कैसे पता लगा सकते हैं?

2) हम कुछ पोस्ट डेटा के रूप में अच्छी तरह से सेवा करने के लिए json एपीआई प्लगइन का उपयोग कर रहे हैं। http://wordpress.org/extend/plugins/json-api/ इस उदाहरण के लिए, मान लें कि हम आउटपुट की डिफ़ॉल्ट विधि का उपयोग कर रहे हैं और इस पृष्ठ को हिट कर रहे हैं: my url.com/category/news?json=1 - किसी को पता है कि अगर यह आउटपुट कैश किया जा रहा है तो हम कैसे सत्यापित कर सकते हैं? यदि इसे कैश नहीं किया जा रहा है, तो यह किस विधि से होगा?

इस ऑनलाइन के बारे में अधिक जानकारी नहीं लगती है, इसलिए सम्मोहक और अनुकूलित वर्डप्रेस साइट बनाने की भावना में, एक भाई की मदद करें

जवाबों:


9

ऐसा प्रतीत हुआ कि jp को wp-super-cache द्वारा कैश नहीं किया जा रहा था, लेकिन हमने एक अलग तरीका अपनाने का फैसला किया। क्षणिक एपीआई का उपयोग करके , हम सभी जोंस पर एक फॉक्स-कैश करने में सक्षम थे, और डेटाबेस के कर को काफी कम कर रहे थे। फिर चीजों के अजाक्स पक्ष पर, हम उस HTML को कैशिंग कर रहे हैं जो इस अर्ध-कैश्ड जॅसन से निर्मित है। चीजें सुपर स्पीडी हैं! यहाँ कोड और अवधारणा का एक छोटा नीचे संस्करण है।

    $transient_key = 'my-transient-key'; 
    $data = get_transient( $transient_key ); 

    if ( $data == '' ) { 
      $args = array(

    'post_type' => 'brand', 
    'posts_per_page' => 50

  );

  $postsArray = array();  
  // The Query
 query_posts( $args );

  // The Loop
  while ( have_posts() ) : the_post();

    $brand_id = get_the_ID();
    $slug = basename(get_permalink());
    $title = get_the_title();
    $description = get_the_content();

                $posts = array(

                   'brand_id' => $brand_id,
                   'machine_name' => $slug,
                              'postTitle' => $title,
                   'description' => $description,

                   );

    array_push($postsArray,$posts);


  endwhile;

   $data = json_encode($postsArray);


 set_transient( $transient_key, $data, 60 * 60 * 24 ); // one day
 }  // now all the brand information is cached as one table call.

echo $data;

अच्छा, अंगूठे ऊपर !!!
दीपेश केसी

6

WP सुपर कैश आपके HTML साइट के पृष्ठों को कुछ HTML टैग्स के लिए जांचता है इससे पहले कि वे उन्हें कैश करें।

आपके पृष्ठों में संभवतः सबसे अधिक </html>टैग (सामान्य समस्या) नहीं है, उस स्थिति में, कुछ जोड़ने की कोशिश करें //</html>- जैसे कि एक वर्कअराउंड है, और WP सुपर कैश तब आपके पृष्ठों के कैश्ड संस्करण उत्पन्न करना चाहिए।

WP सुपर कैश ऐसा क्यों करता है? देखें, यह जांचने का कोई स्पष्ट तरीका नहीं है कि क्या कोई पृष्ठ केवल आधा भरा हुआ है, यह जांचने की तुलना में कि क्या सभी मूल HTML टैग मौजूद हैं और ठीक से बंद हैं।

डोनाचा (WP Super Cache's डेवलपर) के अपने शब्दों में , "यह आधे उत्पन्न पृष्ठों को बंद किया जा रहा है।"


काश, उनके पास विशेष रूप से या अन्य डेटा प्रकारों को कैश करने का विकल्प होता। इतने सारे विकल्प और अभी तक हम इस परियोजना के लिए आवश्यक नहीं हैं। लेकिन, यह एक अच्छा समाधान है। मै उसे करने की एक कोशिश तो करूंगा।
स्टारफ्स

3

सुरक्षा नोट: यह (और अन्य समाधान) का उपयोग तब तक नहीं किया जाना चाहिए जब तक कि आपके पास Content-Type: text/htmlशीर्ष लेख को ओवरराइड करने का एक तरीका न हो जिसे WP सुपर कैश उचित application/jsonमूल्य के साथ भेजता है । JSON के रूप में भेजा text/htmlजाना ब्राउज़र को HTML के रूप में प्रस्तुत करने का कारण होगा, जो संभवतः एक XSS वेक्टर हो सकता है।

ऐसा लगता है कि सर्वर लेयर पर किया जाना आवश्यक है, क्योंकि डब्ल्यूपीएससी आवश्यक हुक प्रदान नहीं करता है।


मैंने इस तरह से इसे किया। यह लिआंग के दृष्टिकोण के समान है, लेकिन सीधे प्लगइन को संशोधित करने की आवश्यकता नहीं है, और इसमें अधिक सटीक रेगेक्स पैटर्न है।

यदि आप REST API के v2 का उपयोग कर रहे हैं, तो आपको REST_REQUESTइसके बजाय उपयोग करना चाहिए JSON_REQUEST

WP सुपर कैश में कुछ परिवर्तन होने पर 22 और # 79 की सदस्यता लेना अच्छा होगा ।

/**
 * Tell WP Super Cache to cache API endpoints
 *
 * @param string $eof_pattern
 *
 * @return string
 */
function wcorg_json_cache_requests( $eof_pattern ) {
    global $wp_super_cache_comments;

    if ( defined( 'JSON_REQUEST' ) && JSON_REQUEST ) {
        // Accept a JSON-formatted string as an end-of-file marker, so that the page will be cached
        $json_object_pattern     = '^[{].*[}]$';
        $json_collection_pattern = '^[\[].*[\]]$';

        $eof_pattern = str_replace(
            '<\?xml',
            sprintf( '<\?xml|%s|%s', $json_object_pattern, $json_collection_pattern ),
            $eof_pattern
        );

        // Don't append HTML comments to the JSON output, because that would invalidate it
        $wp_super_cache_comments = false;
    }

    return $eof_pattern;
}
add_filter( 'wp_cache_eof_tags', 'wcorg_json_cache_requests' );

नमस्ते। मैं wp_cache_eof_tags फ़िल्टर का उपयोग करता हूं, लेकिन अब (और केवल जब कैशिंग सक्षम है) तो मेरे पास एक त्रुटि है: XMLHttpRequest cannot load http://api.mywebsite.com/wp-json/wp/v2/posts. Origin http://mywebsite.com is not allowed by Access-Control-Allow-Origin.मैं इसे कैसे ठीक कर सकता हूं?
कसज़ फ्लोरकॉक

चूँकि आपको एक अलग डोमेन पर REST API मिला है, इसलिए आपकी मुख्य साइट शायद Access-Control-Allow-Originक्रॉस-ऑरिजनल रिक्वेस्ट को अनुमति देने के लिए हेडर निर्यात कर रही है । मैं अनुमान लगा रहा हूं कि कैश्ड पृष्ठ उस हेडर को आउटपुट नहीं कर रहे हैं।
इयान दून

0

मैं इस समस्या से भी मिला। मैंने एपीआई बनने के लिए अपना कुछ कोड लिखा था। जब प्रतिक्रिया प्रकार XML था, तो कैश ने काम किया। लेकिन जब रिस्पॉन्स टाइप जसन था, तो यह काम नहीं किया।

इस बग को ठीक करने में मुझे कुछ घंटे लगेंगे।

यह मेरे लिए काम है।

यहाँ छवि विवरण दर्ज करें

बस अपने कोड को मेरे परिवर्तनों की तरह अपडेट करें।

यह अब मेरे लिए काम करता है।


5
कृपया वास्तविक कोड पोस्ट करें न कि कोड की छवि।
पीटर गोएप ने

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