2012-03-04 22 views
6

जोड़ने के लिए वर्डप्रेस शोर्ट का उपयोग करें मैं एक साधारण वर्डप्रेस प्लगइन लिख रहा हूं जो शोर्ट का उपयोग करता है। मैं उस पृष्ठ को चाहता हूं जिसमें विशिष्ट <meta> टैग होने के लिए शोर्ट शामिल है। क्या यह संभव है? और यदि हां, तो क्या ऐसा करने का एक शानदार तरीका है?<meta> टैग

मुझे पता है कि मैं <meta> टैग wp_head हुक के साथ जोड़ सकता हूं, लेकिन मैं मेटा टैग सामग्री प्लगइन द्वारा उत्पादित एक स्ट्रिंग से मेल खाना चाहता हूं। मैं सभी कोड हेडर में ले जा सकता हूं, लेकिन फिर मुझे यकीन नहीं है कि इसे बाद में शोर्ट से कैसे संदर्भित किया जाए। दूसरे शब्दों में, जब मैं फ़िल्टर के साथ <head> में एक चर घोषित करता हूं, तो यह क्लास विधियों के लिए उपलब्ध नहीं है जिन्हें मैं शोर्ट के साथ बुला रहा हूं।

कोई विचार?

अद्यतन:

एक अच्छा समाधान प्रस्तावित किया गया था, जिसमें शोर्ट के लिए हैंडलर समारोह wp_head हुक करने के लिए कार्रवाई को जोड़ता है:

add_shortcode('fakeshortcode', 'fakeshortcode_handler'); 
function fakeshortcode_handler() { 

    function add_meta_tags() { 
     //echo stuff here that will go in the head 
    } 
    add_action('wp_head', 'add_meta_tags'); 
} 

यह प्रफुल्लित है, लेकिन समस्या यह है कि wp_head से पहले होता है शोर्ट को पार्स किया जाता है और कार्रवाई जोड़ता है (इसलिए अकेले कोड के साथ सिर में कुछ भी नहीं जोड़ा जाता है)। इसे काम करने के लिए, मैंने this post में समाधान उधार लिया। यह मूल रूप से एक फ़ंक्शन है जो पोस्ट में "आगे दिखता है" और देखता है कि कोई शोर्ट आ रहा है या नहीं। यदि ऐसा है, तो आईटी add_action('wp_head'... जोड़ता है।

संपादित करें: मैंने चर के पारित होने के बारे में मेरे अनुवर्ती प्रश्न को हटा दिया। यह एक नया प्रश्न है here

उत्तर

11

प्रथम प्रयास (का उपयोग नहीं करते इस ... नीचे देखें 'संपादन'): फिर

add_shortcode('metashortcode', 'metashortcode_addshortcode'); 

:

सबसे पहले, आप कुछ इस तरह के साथ अपने शोर्ट निर्धारित करने की आवश्यकता , आप समारोह है जिसमें आप ऐसा ही कुछ के साथ wp_head करने के लिए एक हुक जोड़ना होगा बना देंगे:

function metashortcode_addshortcode() { 
    add_action('wp_head', 'metashortcode_setmeta'); 
} 

उसके बाद, आप wha को परिभाषित करेंगे टी आप wp_head में क्या करना चाहते हैं:

function metashortcode_setmeta() { 
    echo '<meta name="key" content="value">'; 
} 

आवश्यकता के अनुरूप अपने मेटा डेटा जोड़ने चाहिए शोर्ट [metashortcode] जोड़ा जा रहा है। यह कोड केवल यह समझने में सहायता के लिए प्रदान किया गया था कि इसे कैसे किया जाए। यह पूरी तरह से परीक्षण नहीं किया गया था।

संपादित करें: पिछला कोड केवल एक अवधारणा थी और निष्पादन आदेश के कारण काम नहीं कर सकता।

// Function to hook to "the_posts" (just edit the two variables) 
function metashortcode_mycode($posts) { 
    $shortcode = 'metashortcode'; 
    $callback_function = 'metashortcode_setmeta'; 

    return metashortcode_shortcode_to_wphead($posts, $shortcode, $callback_function); 
} 

// To execute when shortcode is found 
function metashortcode_setmeta() { 
    echo '<meta name="key" content="value">'; 
} 

// look for shortcode in the content and apply expected behaviour (don't edit!) 
function metashortcode_shortcode_to_wphead($posts, $shortcode, $callback_function) { 
    if (empty($posts)) 
    return $posts; 

    $found = false; 
    foreach ($posts as $post) { 
    if (stripos($post->post_content, '[' . $shortcode) !== false) { 
     add_shortcode($shortcode, '__return_empty_string'); 
     $found = true; 
     break; 
    } 
    } 

    if ($found) 
    add_action('wp_head', $callback_function); 

    return $posts; 
} 

// Instead of creating a shortcode, hook to the_posts 
add_action('the_posts', 'metashortcode_mycode'); 

का आनंद लें: यहाँ एक काम उदाहरण है कि अपेक्षित परिणाम मिल जाएगा है!

+0

यह अच्छा है। मुझे एहसास नहीं हुआ कि wp_head क्रियाएं होने से पहले शोर्ट को पार्स किया गया था। मैं इसे तुरंत आज़मा दूंगा। यदि आप सही हैं तो मुझे यकीन है कि यह मेरी समस्या को अच्छी तरह से हल करेगा! – emersonthis

+0

मेरा संदेह सही था। शोर्ट को पार्स किए जाने से पहले wp_head क्रियाएं ट्रिगर होती हैं। तो यह समाधान बिल्कुल वर्णन के अनुसार काम नहीं करता है। हालांकि, दृष्टिकोण को संशोधित किया जा सकता है ... [ऊपर मेरा अपडेट देखें] – emersonthis

+0

क्षमा करें एमर्सन, मैंने गलत समझा कि आप क्या करने की कोशिश कर रहे थे।इसे पहले निष्पादित नहीं किया गया है। इसलिए, मैंने इसे ठीक से काम करने के लिए अपना समाधान संपादित किया। – Maxime