2017-05-22 2 views
0

標準のPHP WordPressテーマをTimber/Twigに変換しようとしていますが、カスタム関数からの出力を得るのに問題があります。これは、特に、投稿にYoast Primary Termが設定されているかどうかを調べ、複数のカテゴリを持つ投稿の主要なカテゴリを指定できるようにします。私は、WordPressのカスタム機能をTimberのインデックスページで利用できますか?

私はループ内でこれを行う必要があり、ほとんどのドキュメントでは1ページで行う方法について説明しています。私はここで「機能」セクション(https://github.com/timber/timber/wiki/WP-Integration#functions)で読んだことをもとに

function my_theme_get_post_category() { 
    // regular list of categories set in WP 
    list($wp_category) = get_the_category(); 
    // primary category set with Yoast plugin 
    $primary_category = new WPSEO_Primary_Term('category', get_the_ID()); 
    $primary_category = $primary_category->get_primary_term(); 
    $primary_category = get_category($primary_category); 
    // use only one or the other 
    if (is_wp_error($primary_category) || $primary_category == null) { 
     $category = $wp_category; 
    } else { 
     $category = $primary_category; 
    } 
    return $category; 
} 

、私は{{ function('my_theme_get_post_category', post.ID) }}と私のテンプレートでこれを呼び出すことができる必要があり、私は私のfunctions.phpでこのような機能を持っていますしかし、それは動作しません。

私は、$postIDを関数の必須パラメータにしようとしましたが、何も役に立たなかったのです。

また、TimberHelper::function_wrapperを使用し、{{ my_theme_get_post_category }}のテンプレートでそれを呼び出してみましたが、それでも何も成し遂げられませんでした。

+0

現在使用しているティンバーのバージョンはどれですか? – Gchtr

+0

私はプラグインバージョン1.2.4を使用しています – syzygy333

答えて

0

{{ function('my_theme_get_post_category', post.ID) }}を使用する場合、呼び出す関数は、渡した引数を受け入れる必要があります。

function my_theme_get_post_category() { 
    // Your function code 
} 

...あなたの投稿IDは関数に渡されません。あなたが言及したように、すでに投稿IDをパラメータとして追加しようとしている可能性があります:

function my_theme_get_post_category($post_id) { 
    // Your function code 
} 

何も起こりません。これは、あなたの関数がThe Loopに依存する関数、例えばget_the_category()またはget_the_ID()を使用するためです。これらの関数は、グローバル変数から現在の投稿IDを取得します。これは、Timberの投稿をループするときには必ずしも設定されません。

木材を使用する場合は、これらの機能に特定の投稿IDを使用するように指示する必要があります。 get_the_category()のドキュメントを見ると、渡すことのできるオプションの引数が1つあることがわかります。投稿ID。

他の機能の場合は、get_the_ID()の場合は、関数に渡すパラメータ$post_idに置き換えることができます。

function my_theme_get_post_category($post_id) { 
    // regular list of categories set in WP 
    list($wp_category) = get_the_category($post_id); 

    // primary category set with Yoast plugin 
    $primary_category = new WPSEO_Primary_Term('category', $post_id); 
    $primary_category = $primary_category->get_primary_term(); 
    $primary_category = get_category($primary_category); 

    // use only one or the other 
    if (is_wp_error($primary_category) || $primary_category == null) { 
     $category = $wp_category; 
    } else { 
     $category = $primary_category; 
    } 

    return $category; 
} 
関連する問題