サポート » テーマ » 自作の関数を呼びたい。

  • 解決済 ForestRiver

    (@forestriver)


    functions.phpで書いた自作の関数をheader.phpで呼びたいのですがうまくいきません。
    関数はdescriptionを生成するようなコードで、wordpressの既存の関数を
    編集するような感じではありません。
    functions.phpには
    ‘add_action(‘wp_head’, ‘myfunc’);
    function myfunc(){…’
    のようにかき
    header.phpには

    ‘<meta content=”<?php myfunc(); ?>” name=”description”>’

    と書いています。
    初心者なので書き方を間違っていると思うのですが、
    ご指導お願いします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • こんにちは、

    add_action(アクションフィルタ)を使う場合は、以下のように記述します。

    add_action('wp_head', 'myfunc');
    
    function myfunc(){
      $description = 'hello world';
      echo printf( '<meta content="%1$s" name="description" />', $description );
    }

    functions.php で、自作テンプレート関数を作成し、テンプレート上に関数を記述する場合は、add_action()は必要ありません。

    function myfunc(){
      $description = 'hello world';
      echo $description;
    }

    公式テーマの場合は、head要素内に、独自テンプレート関数を置く事は出来ませんので、header領域に、なんか追加する場合は、フィルタを使う方がお勧め

    関連
    http://tenman.info/labo/snip/archives/4529

    個別投稿(ページ)で、カスタムフィールド、keyword,description がある場合は、meta要素を埋め込む例(get_the_generator_xhtmlは、wp_headに読み替えてください)

    余談
    ヘッダー要素内にタグを書けば、済むことなのに、なんで styleの埋め込みには、
    wp_enqueue_style(),scriptなら、wp_enqueue_script() を使ってください みたいな
    「超ー ウゼー」事が言われるのか?

    ヘッダー要素内には、プラグイン等もスタイルを追加しますし、スクリプトも追加します。
    直接書いてしまうと、「依存関係」がコントロールできなくなります。

    プラグインのスタイルが、テーマのスタイルの下に書き込まれると、同じ指定がある場合には、プラグインのスタイルが有効になって、テーマのスタイルが崩れる原因になったり、
    jQueryのコードを埋め込んだのに、その時点でjQueryが読み込まれずに、「なんか、エラーになっちゃうんですけどー」みたいなことが起きるために、

    ここら辺をうまく、プラグイン、テーマ、コアでコラボするために、ちょっと面倒な仕組みがありますので、良く調べておくといいです。

    スレッド開始 ForestRiver

    (@forestriver)

    nobitaさんご返答ありがとうございます。
    headへの追加はフィルタを使わせていただきます。
    関連事項まで答えていただきとても感謝しております。
    勉強させていただきます。

    しかし少々問題が起こりまして、noticeが出てきてしまいました。
    is_single()の画面の時に、descriptionに投稿内容の一部を挿入しようとしているのですがうまく値が取れていないようです。エラーは
    Notice:Undefined variable: post in....172
    そのあたりの内容が下記です。

    }else if(is_single()){
    			$single_p_cont = strip_tags($post->post_content);
    			$single_p_cont =mb_substr($single_p_cont, 0, 80)."...";
    			echo printf( '<meta content="%1$s" name="description" />', $single_p_cont );
    }

    $postの値が取得できていないということだと思うのですが、
    どう書き換えたらよいのでしょうか。
    ご指導よろしくお願いいたします。

    ーー追記・訂正ーー
    また、printfは 出力した文字列の長さを返し訂るように思われる
    数字が、descriptionタグの後ろに出てきてしまうのですが、
    echo だけでも構わないのでしょうか
    よろしくお願いします。

    モデレーター Daisuke Takahashi

    (@extendwings)

    globalキーワードは指定しましたか?
    あと、sprintfを調べてみてください。

    スレッド開始 ForestRiver

    (@forestriver)

    Daisuke Takahashiさん ご返答ありがとうございます。
    globalで呼び出すことができました。
    functions.phpでは必要なのですね。

    sprintfで文字列が帰ってきました。ありがとうございます。

    nobita様 Daisuke Takahashi様
    ご指導ありがとうございます。
    無事に解決いたしました。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「自作の関数を呼びたい。」には新たに返信することはできません。