2009-06-16 11 views
7

एक नई वर्डप्रेस 2.8 स्थापना पर, मेरे पास श्रेणी फू को सौंपा गया कुछ पोस्ट है जो पहले सार्वजनिक थे लेकिन तब से निजी बना दिया गया है। जब मैं वर्डप्रेस में लॉग इन हूं (व्यवस्थापक के रूप में) और एक ही ब्राउज़र में एक अलग टैब में Foo श्रेणी पृष्ठ ब्राउज़ करने के साथ होता है, तो मैं श्रेणी पृष्ठ पर निजी पोस्ट देख सकता हूं, जिसमें शब्द द्वारा उपसर्ग प्रविष्टि शीर्षक " निजी: "।वर्डप्रेस लॉग-इन उपयोगकर्ताओं को निजी पोस्ट प्रदर्शित करता है - इस कार्यक्षमता को कैसे बंद करें?

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

साइट पर निजी पोस्ट देखने के लिए इस अवांछित क्षमता को बंद करने के लिए श्रेणी संग्रह पृष्ठ पर या WP फ़ाइल पर WP लूप के साथ मुझे क्या करना चाहिए?

+0

क्या कोई व्यवस्थापक उन्हें भी नहीं देखता? – jitter

+0

ऐसा इसलिए है क्योंकि आपके व्यवस्थापक उपयोगकर्ता के पास सामान्य उपयोगकर्ताओं की थोड़ी अधिक अनुमतियां हैं? क्या आपने एक मानक "सब्सक्राइबर" उपयोगकर्ता बनाने का प्रयास किया है और यह देखकर कि क्या आपको एक ही समस्या मिलती है? – Amadiere

+0

दोनों प्रशासक, सिस्टम पर केवल दो उपयोगकर्ता हैं। मैं लॉग इन करते समय इस ब्लॉग पर निजी पोस्ट नहीं देखना चाहता हूं (सामने के अंत में, मेरा मतलब है - आप जानते हैं, उपयोगकर्ता की तरह साइट ब्राउज़ करना)। इसलिए "ग्राहक" उपयोगकर्ता बनाना इस मामले में मदद नहीं करेगा - I अभी भी बैकएंड साइट रखरखाव करने के लिए व्यवस्थापक के रूप में लॉग इन करने की आवश्यकता है। – Asparagirl

उत्तर

18

आप क्या चाहते करने के लिए हैक रास्ता the_post के बाद अपने पाश (के शीर्ष पर कोड की इस पंक्ति डाल करने के लिए है() हिस्सा:

if(get_post_status()=='private') continue; 

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

ऐसा करने का सही तरीका एक फ़िल्टर जोड़ना है जो टी उत्पन्न करने के लिए उपयोग किए गए एसक्यूएल को संशोधित करता है वह पदों की सूची। मुश्किल हिस्सा यह है कि अगर आप व्यवस्थापक अनुभाग में हैं तो इसे फ़िल्टर न करें, अन्यथा आप कभी भी अपनी निजी पोस्ट कभी नहीं देख पाएंगे। इस फ़िल्टर के लिए सबसे अच्छी जगह आपकी थीम की functions.php फ़ाइल में है। यहाँ तुम क्या में वहाँ डाल चाहिए:

add_filter('posts_where', 'no_privates'); 
function no_privates($where) { 
    if(is_admin()) return $where; 

    global $wpdb; 
    return " $where AND {$wpdb->posts}.post_status != 'private' "; 
} 
+0

मैं अपने WordPress के लिए एक ही समस्या में आया था। आपका समाधान लागू दिखता है। क्या आप बता सकते हैं कि PHP फ़ाइल क्या शामिल है? और, add_filter कहां होना चाहिए ('post_where', 'no_privates'); जोड़ा जाना? – Elaine

+0

उत्तर के लिए धन्यवाद! मेरी समस्या हल हो गई, और इसे वेब पर कहीं और नहीं मिला। –

+0

+ ईलेन PHP फ़ाइल function.php है और आपकी थीम निर्देशिका में स्थित है। आप इस कोड को functions.php में कहीं भी कहीं भी जोड़ सकते हैं जैसे कि

0

यह सटीक प्रश्न का सीधा समाधान नहीं है, लेकिन एक ही तरीका है कि आप उन पदों को छुपा सकते हैं उन्हें एक विशेष श्रेणी में असाइन करना है, फिर उस श्रेणी को लूप में प्रदर्शित करने से छुपाएं। प्रदर्शन से किसी एक श्रेणी से पोस्ट निकालने के लिए, लूप (तुरंत जबकि() बयान के बाद) के अंदर कोड की इस पंक्ति का उपयोग करें:

<?php if (in_category('3')) continue; ?> 

इस उदाहरण में, 3 श्रेणी की श्रेणी आईडी बाहर करने के लिए है, और कोड बस वर्डप्रेस को अगले पोस्ट पर जारी किए बिना जारी रखने के लिए कहता है।

1

तो अगर कोई भी व्यवस्थापक सहित इन निजी पोस्ट, देखने के लिए है, क्यों नहीं बस अप्रकाशित या ड्राफ्ट के लिए अपनी स्थिति सेट?

+0

एक कारण यह है कि आपके पास उपयोगकर्ताओं का एक टन है और वे पोस्ट को निजी पर सेट कर रहे हैं, भले ही आपने अप्रकाशित या ड्राफ्ट बेहतर समाधान दिया हो। –