2012-03-04 8 views
6

私はショートコードを使用する簡単なワードプレスプラグインを作成しています。ショートコードを含むページに具体的な<meta>タグが必要です。これは可能ですか?もしそうなら、それを行う上品な方法はありますか?ワードプレスのショートコードを使用して<meta>タグを追加する

wp_headフックで<meta>タグを追加できますが、メタタグのコンテンツをプラグインによって生成された文字列に一致させることができます。私はすべてのコードをヘッダーに移すことができましたが、後でショートコードから参照する方法がわかりません。つまり、フィルタで<head>の変数を宣言すると、ショートコードで呼び出すクラスメソッドでは使用できません。

アイデア?

UPDATE:

ショートのハンドラ関数は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が前に発生ありショートコードが解析され、アクションが追加されます(したがって、ALONEより上のコードでは何も頭に追加されません)。それを機能させるために、私はthis postで解決策を借りました。これは、基本的には、ポストに「先を向ける」機能であり、ショートコードがあれば見ることができます。そうであれば、ITはadd_action('wp_head'...を追加します。

EDIT: 変数を渡す方法に関する私のフォローアップの質問を削除しました。 新しい質問hereです。

答えて

11

最初の試み(これを使用していない...の下にある[編集]を参照)

まず、あなたはこのようなものを使用してショートを設定する必要があります。

add_shortcode('metashortcode', 'metashortcode_addshortcode'); 

その後その後、あなたは義和を定義します

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

:、あなたがそのようなものでwp_headにフックを追加する必要がありますする機能を作成しますあなたがwp_headでやりたいT:

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

申し訳ありませんEmerson、私はあなたがしようとしていたことを誤解しました。以前は実行されていません。したがって、私は自分のソリューションを編集して正しく動作させるようにしました。 – Maxime

関連する問題