web-dev-qa-db-ja.com

get_post_metaがループ内で機能しない

私は私の創世記の子テーマに追加したカスタムメタボックスでの支援を望んでいました。

データは正しく保存され、正しく保存されていますが、get_post_metaを使用してエコーアウトしようとしても、何も表示されません。しかし、誰かが私に見せたカスタム関数はそれを反映しています。誰かがそれが機能していないことを理解することはできますか?

これはうまくいくはずですが、うまくいきません。

add_action ('genesis_before_post_content', 'gteh_tagline');
function gteh_tagline() {
    $meta = get_post_meta($post->ID, $field['dbt_text'], true);
    echo $meta;
    }

これは動作しますが、私はこれを使用したくない、むしろ適切なコードを使用します

add_action ('genesis_before_post_content', 'gteh_tagline');
function gteh_tagline() {
    echo "<pre>";
    $customs = get_post_custom(get_the_ID());
    $text = (isset($customs['dbt_text'][0]))?$customs['dbt_text'][0]:"";
    var_dump($customs);
    echo "<br/>text=".$text;
    echo "</pre>";
}

それはこれをダンプし、尋ねられたときにそれをエコーアウトします。

["dbt_text"]=>
array(1) {
[0]=>
string(89) "At vero eos et accusamus et iusto odio dignityr simos ducimus qui blanditiis praesentium "
}

これがdbt_textです。

$prefix = 'dbt_';
$meta_box = array(
'id' => 'my-meta-box',
'title' => 'Post Tagline',
'page' => 'post',
'context' => 'normal',
'priority' => 'high',
'fields' => array(
    array(
        'name' => 'Post Tagline',
        'desc' => 'Displayed below the post title',
        'id' => $prefix . 'text',
        'type' => 'text',
        'std' => ''
    )
)

;

2
gteh

2番目のコードブロックについて「不適切」なものはありません。これはデバッグ目的で書かれたばかりです。主な違いは、その2番目のブロックがget_the_ID()を使用していたことです。試してみてください。

add_action ('genesis_before_post_content', 'gteh_tagline');
function gteh_tagline() {
    $meta = get_post_meta(get_the_ID(), $field['dbt_text'], true);
    echo $meta;
}

またはglobalを付けて$postを引き込もうとします。

add_action ('genesis_before_post_content', 'gteh_tagline');
function gteh_tagline() {
    global $post;
    $meta = get_post_meta($post->ID, $field['dbt_text'], true);
    echo $meta;
}

あるいは、そのアクションがどのように書かれているかによって、になるでしょう。

add_action ('genesis_before_post_content', 'gteh_tagline');
function gteh_tagline($post) {
    $meta = get_post_meta($post->ID, $field['dbt_text'], true);
    echo $meta;
}
1
s_ha_dum

関数内で$postをglobalに設定する必要があります。

function wpse_16722_tagline() {
    global $post;

    $meta = get_post_meta( $post->ID, $field['dbt_text'], true );
        echo $meta;
    }
add_action ('genesis_before_post_content', 'wpse_16722_tagline');
1

最初の機能に関する2つの問題:

  1. $ post-> IDを使う前にget_the_ID()を使うか$ postをグローバルにしてください。

  2. $ field ['dbt_text']は関数のどこにも定義されていません。これも世界から来ているはずですか?

編集:あなたのコメントを読み、他の答えに対する答えを書いた後、私はあなたがPHPの変数スコープがどのように機能するのか理解していないと思う。変数が関数内でどのように機能するのかを理解するために、これについて読んでおくとよいでしょう。

http://php.net/manual/en/language.variables.scope.php

1
Otto