2

私はphpの初心者で、初めてのポスターです。

私は、ディスコグラフィーが必要なワードプレス サイトに取り組んでいます。
カスタム投稿タイプを作成しました
: アルバム
管理者投稿編集ページにカスタム メタ ボックスとカスタム フィールドを追加しまし
た アーカイブ ページを作成し、すべてのカスタム フィールド メタをエコーし​​ました。

http://squarerecording.com/albums/

私のカスタム フィールドの 1 つは、一連の 5 つのチェックボックスです。そのアーカイブ ページの各アルバムの最後の行です。

array(
                'name'    => 'Services Rendered',
                'desc'    => 'field description (optional)',
                'id'      => $prefix . 'services',
                'type'    => 'multicheck',
                'options' => array(
                    'R' => 'Recorded',
                    'Mi' => 'Mixed',
                    'Ma' => 'Mastered',
                    'P' => 'Produced',
                    'RMV' => 'Re-mastered for vinyl',
                ),
            ),

コンマ区切り形式で「Services Rendered」を正常にエコーしましたが、順序は投稿ごとに異なります (P、RMV、R、Mi、Ma-最初の投稿、P、Ma、Mi、R、RMV-投稿) 2番目など)

「Services Rendered」を出力するアーカイブ ページのコードは次のとおりです。

<?php $key="sqr_services";  get_post_meta($post->ID, $key); 
 $sqr_services = get_post_meta( $post->ID, $key );
 $comma_sep_services = implode(",", $sqr_services );
    echo $comma_sep_services; 
?>

私の質問は:編集ページに表示されるのと同じ順序でリストされるようにするにはどうすればよいですか (R、Mi、Ma、P、RMV)? 常にすべてがチェックされるわけではないことに注意してください。

アンシリアライズをいじってみましたが、それについて十分に知りません。

正しい方向への助けやポイントは大歓迎です! ありがとう

4

1 に答える 1

0

この投稿は興味深いかもしれません。これは、Wordpress コア ファイルの編集を必要としない数少ない解決策の 1 つです。

によって返される「変更日」の順序ではなく、メタ ID によってキーと値のペアを並べ替える、この変更された get_post_custom 関数を試すこともできますget_post_custom

3 番目のオプションは、この回答をふるいにかけることです。

更新:愚かな私!PHP は配列を好きなように並べ替えることができますが、それが数値順またはアルファベット順でない場合は、少しトリッキーになります。アルファベット順がうまくいく場合は、次のことを試してください。

$key="sqr_services";  
get_post_meta($post->ID, $key); 
$sqr_services = get_post_meta( $post->ID, $key );
asort($sqr_services);
foreach ($sqr_services as $key => $val) {
    echo "$val\n";
}

より複雑な配列の並べ替えを学びたい場合は、私のゲストになってください。自分?私はABCに固執します。

更新: 愚かなあなた! 配列内の個々の値のチェックと表示に関するコメントに応えて、$sqr_services必要なことはin_array()をチェックすることだけです。

if (in_array('Recorded', $sqr_services)){echo 'Recorded';}
if (in_array('Mixed',$sqr_services)){echo 'Mixed';}
if (in_array('Mastered',$sqr_services)){echo 'Mastered';}
if (in_array('Produced',$sqr_services)){echo 'Produced';}
if (in_array('Re-mastered for vinyl',$sqr_services)){echo 'Re-mastered for vinyl';}

配列に値を追加する (新しい税用語を追加する) 場合、ループでチェックするまで表示されないという点で柔軟性が低くなります。ただし、これは非常に限られたオプションのセットのように見えるため、それは問題にはならないと思います。

于 2012-09-18T19:29:25.097 に答える