web-dev-qa-db-ja.com

フィルタ追加機能で投稿IDを取得する方法

私はプラグインを書いていて、いくつかのカスタムメタ情報に基づいて投稿の最後にデータを追加する方法を見つけようとしています。

だから私はこれまでのところこれをやっている:

add_filter('the_content', 'AppendMeta');

そして、これが "AppendMeta"関数です。

AppendMeta($content) {
    echo $content; // Echo out post content
    $PersonName = get_post_meta($post->ID, 'PersonName', true);
    echo 'Person: ' . $PersonName;
}

このコードは、$ post-> IDを投稿のIDに置き換えれば機能しますが、ユーザーが現在ナビゲートしている投稿に基づいて機能するために必要です。投稿IDをパラメータとしてどのように渡しますか? $ post-> IDはこのシナリオでは動作しません、そして私はその理由を見つけることができません。

3
Talon

決して気にしないで、私はget_the_ID();を使うことができることを知った。

この関数はthe_contentフィルタ内の投稿IDを返します。この関数は単にグローバル$postオブジェクトを宣言し、そのIDを返します。

add_filter('the_content', 'wpse51205_content')
wpse51205_content($content) {
    echo $content; // Echo out post content
    $PersonName = get_post_meta(get_the_ID(), 'PersonName', true);
    echo 'Person: ' . $PersonName;
}

get_the_ID()を使用したくない場合は、使用する前に単に$postオブジェクトをグローバルに宣言する必要があります。

add_filter('the_content', 'wpse51205_content')
wpse51205_content($content) {
    global $post;
    echo $content; // Echo out post content
    $PersonName = get_post_meta($post->ID), 'PersonName', true);
    echo 'Person: ' . $PersonName;
}
8
Talon

the_ID()はループの中でのみ使われることになっています、さもなければそれに頼ることができません。関数呼び出し内で$GLOBALS['post']オブジェクトを使用したほうがよいでしょう。

4
Ashfame