0

Wordpress Advanced Custom Fields を使用したかなり基本的なセットアップがあります。カスタム投稿にフィールドを追加して、投稿ページに表示する必要があります。動作するこのコードがありますが、複数のチェックボックスが選択されているカスタムフィールドに到達すると、明らかにその特定のフィールドは配列であるため、「配列」という単語をダンプします。

以下のこのコードを作成するにはどうすればよいですか。通常のフィールドと配列を含むフィールドのすべてのラベルとデータをダンプします。

$fields = get_field_objects();
if( $fields )

{
echo '<div class="item-info-custom">';
        echo '<dl class="item-custom">';
        echo '<dt class="title"><h4>Custom Information</h4></dt>';
            foreach( $fields as $field_name => $field )
                {
                    echo '<dt class="custom-label">' .    $field['label'] . ': </dt>';
                    echo '<dd class="custom-data">' . $field['value'] . '</dd>';
                }

        echo '</dl>';
echo '</div>';
}

これは私が仕事をするようになった最終的なコードです:

<?php

$fields = get_field_objects();
if( $fields )

{
echo '<div class="item-info-custom">';
        echo '<dl class="item-custom">';
        echo '<dt class="title"><h4>Custom Information</h4></dt>';
            foreach( $fields as $field_name => $field )
                {
                        echo '<dt class="custom-label">' .         $field['label'] . ': </dt>';
                    echo '<dd class="custom-data">';

if (is_array($field['value'])) {
echo implode(', ', $field['value']);
}
else {
 echo $field['value'];
}

echo '</dd>';
                }

        echo '</dl>';
echo '</div>';
}

?>
4

2 に答える 2

1

$field['value'] の配列の構成に応じて、次のいずれかを実行できます。

それが値の単純なリストである場合は、それらを implode でまとめてテープで留めることができます。

echo '<dd class="custom-data">' . (is_array($field['value'])?implode(", ", $field['value']:$field['value']) . '</dd>';

配列にメイン配列のように表現されたデータが含まれている場合 (ラベル キーと値キーを使用)、配列をレンダリングする関数を作成し、配列値に遭遇したときにそれを再帰的に呼び出すことができます。

<?php

function showFields($data){
echo '<div class="item-info-custom">';
        echo '<dl class="item-custom">';
        echo '<dt class="title"><h4>Custom Information</h4></dt>';
            foreach( $fields as $field_name => $field )
                {
                    echo '<dt class="custom-label">' .    $field['label'] . ': </dt>';
                    if (is_array($field['value'])){
                        showFields($field['value']);
                    }
                    echo '<dd class="custom-data">' . $field['value'] . '</dd>';
                }

        echo '</dl>';
echo '</div>';
}   
$fields = get_field_objects();
if( $fields ) showFields($fields);
于 2013-07-11T19:21:05.980 に答える
0

型チェックを行う必要があります。次のような関数を使用is_array()して、追加のロジックを実行できます。

例えば:

echo '<dd class="custom-data">';

if (is_array($field['value'])) {
  echo implode(', ', $field['value']);
}
else {
  echo $field['value'];
}

echo '</dd>';
于 2013-07-11T19:20:42.740 に答える