2012-03-04 24 views
6

Piszę prostą wtyczkę WordPress, która używa shortcode. Chcę, aby strona zawierająca kod krótki miała konkretne tagi <meta>. czy to możliwe? A jeśli tak, czy istnieje elegancki sposób na zrobienie tego?Użyj kodu WordPress, aby dodać <meta> tagi

Wiem, że mogę dodawać znaczniki <meta> za pomocą haka wp_head, ale chcę, aby treść metatagów pasowała do ciągu znaków utworzonego przez wtyczkę. Mogłabym przenieść cały kod do nagłówka, ale nie jestem pewien, jak odwołać się do niego później z shortcode. Innymi słowy, kiedy deklaruję zmienną w <head> za pomocą filtru, nie jest ona dostępna dla metod klasy, do których dzwonię z krótkim kodem.

Wszelkie pomysły?

UPDATE:

Miła rozwiązanie zostało zaproponowane w którym funkcja obsługi dla SHORTCODE dodaje akcję do wp_head haka:

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

to puchną, ale problemem jest to, że wp_head dzieje się przed shortcode zostanie sparsowany i dodaje akcję (więc nic nie zostanie dodane do głowy z kodem powyżej ALONE). Aby to zadziałało, pożyczyłem rozwiązanie w this post. Zasadniczo jest to funkcja, która "patrzy w przyszłość" na post i widzi, czy nadchodzi jakiś skrót. Jeśli tak, to IT dodaje add_action('wp_head'....

EDYTOWANIE: Usunąłem moje następne pytanie dotyczące przekazywania zmiennej. To nowe pytanie here.

Odpowiedz

11

Pierwsza próba (nie używać tego ... patrz 'Edycja' poniżej):

Najpierw trzeba ustawić shortcode z mniej więcej tak:

add_shortcode('metashortcode', 'metashortcode_addshortcode'); 

Następnie będziesz utworzyć funkcję, w której będziesz musiał dodać hak do wp_head z czymś takim:

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

Następnie, będziemy definiować WHA t chcesz zrobić w wp_head:

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

Dodanie shortcode [metashortcode] należy dodać meta danych, ile potrzeba. Kod został dostarczony tylko po to, aby pomóc Ci zrozumieć, jak to zrobić. To nie zostało w pełni przetestowane.

Edytuj: Poprzedni kod był tylko koncepcją i nie może działać z powodu kolejności wykonania. Oto działający przykład, który uzyska oczekiwany wynik:

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

Ciesz się!

+0

To jest fajne. Nie zdawałem sobie sprawy, że shortcode został sparsowany PRZED działaniami wp_head. Oddam to od razu. Jeśli masz rację, jestem pewien, że to rozwiąże mój problem ładnie! – emersonthis

+0

Moje podejrzenie było prawidłowe. Działania w domenie wp_head są wyzwalane PRZED przetworzeniem krótkiego kodu. To rozwiązanie nie działa dokładnie tak, jak to opisano. JEDNAK, podejście może być modyfikowane ... [zobacz moją aktualizację powyżej] – emersonthis

+0

Przepraszam Emerson, źle zrozumiałem, co próbujesz zrobić.NIE jest wykonywane wcześniej. Dlatego też zredagowałem moje rozwiązanie, aby działało poprawnie. – Maxime

Powiązane problemy