2012-03-04 21 views
6

Kısa kod kullanan basit bir WordPress eklentisi yazıyorum. Kısa kod içeren sayfanın belirli <meta> etiketlerine sahip olmasını istiyorum. Mümkün mü? Ve eğer öyleyse, bunu yapmak için zarif bir yolu var mı?<meta> numaralı etiket eklemek için WordPress kısa kodunu kullanın

<meta> etiketlerini wp_head kanca ile ekleyebileceğimi biliyorum, ancak meta etiket içeriğinin eklentinin ürettiği bir dizeyle eşleşmesini istiyorum. Tüm kodu üstbilgiye taşıyabilirim, ancak daha sonra kısa koddan nasıl başvuracağımı bilmiyorum. Başka bir deyişle, bir süzgeçle <head> değişkeninde bir değişken bildirdiğimde, kısa kodla çağırdığım sınıf yöntemlerinde kullanılamaz.

Herhangi bir fikrin var mı?

GÜNCELLEME:

SHORTCODE için işleyici işlevi wp_head kanca için harekete ekleyen güzel bir çözüm önerilmiştir

:

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'); 
} 

Bu kabarma, ama sorun o wp_head ÖNCE hâle mi Kısa kod ayrıştırılır ve eylemi ekler (böylece ALONE üzerindeki kodla başa hiçbir şey eklenmez). Çalışması için çözümü this post numaralı telefondan ödünç aldım. Temel olarak, yazıya "ileriye bakacak" bir işlevdir ve herhangi bir kısa kodun gelip gelmediğini görür. Öyleyse, BT add_action('wp_head'...'u ekler.

DÜZENLEME: Ben değişkeni geçmek konusunda benim takip soruyu kaldırıldı. Yeni bir soru here.

cevap

11

İlk denemesi (bu ... aşağıda 'düzenle' bkz kullanmayın): Sonra

add_shortcode('metashortcode', 'metashortcode_addshortcode'); 

:

İlk olarak, böyle bir şey ile shortcode ayarlamanız gerekir , size böyle bir şeyle wp_head için bir kanca eklemek gerekecek hangi işlevi oluştururuz:

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

Ardından, wha tanımlarsınız Eğer wp_head yapmak istediğim t:

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

gerektiği gibi meta veri eklemek gerekir shortcode [metashortcode] ekleme. Kod, yalnızca bunun nasıl gerçekleştirileceğini anlamanıza yardımcı olmak için sağlandı. Tamamen test edilmedi.

Düzenleme: önceki kod sadece bir kavram oldu çünkü yürütme düzenin çalışamaz.

// 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'); 

Enjoy: İşte beklenen sonuç elde edecek bir çalışma örneğidir!

+0

Bu harika. Wp_head eylemlerinin gerçekleşmesinden ÖNCE kısa kodun ayrıştırıldığını fark etmemiştim. Bunu hemen deneyeceğim. Haklıysan, sorunumu güzelce çözeceğime eminim! – emersonthis

+0

Şüphelerim doğruydu. Kısa kodun ayrıştırılmasından ÖNCE wp_head eylemleri tetiklenir. Yani bu çözüm tam olarak açıklandığı gibi çalışmıyor. HOWEVER, yaklaşım değiştirilebiliyor ... [güncellemeye bakın] – emersonthis

+0

Üzgünüz Emerson, ne yapmaya çalıştığınızı yanlış anladım.Daha önce yürütülür. Bu nedenle, çözümümün düzgün çalışması için düzenledim. – Maxime

İlgili konular