メタキーがuser_meta
でmy_posts
がmeta_value
に格納されている多次元値を取得しようとしています。
a:3:{i:0; s:2: "23"; i:1; s:2: "20"; i:2; s:1: "9";}
管理ページのどこかに、上の値に保存されている選択された投稿の合計を表示したいのですが…。
値がシリアル化されている場合は、WordPress関数を使ってメタデータを取得すると、そのデータはシリアル化されずに元に戻され、それを繰り返すことができます(配列のように見えます)。
$somevar = get_user_meta( '99999', 'your-key', true );
WordPressのオプションと同様に、ユーザーメタは配列またはオブジェクトの場合はシリアル化され、単一の値は文字列として格納されます(シリアル化されていない)。
get_user_meta
を呼び出すと、シリアル化された文字列の代わりにデータの配列が返されます。自分でシリアル化してシリアル化解除する必要はありません。WordPressメタ関数は、metaの取得および設定時にmaybe_serialize
およびmaybe_unserialize
を使用して処理します。
これはWPのオプション処理に似ていて、ほとんど同じことをしています、 " プラグインオプションテーブルに答えるときにこれをカバーしています、シリアル化されたデータです "..
ただし、より直接的に質問に答えるには、配列内の値を合計するには、次のようにarray_sum
を使用します。前の例のvarに基づきます。
if( !empty( $somevar ) )
$sum = array_sum( $somevar );
または..
$sum = 0;
if( !empty( $somevar ) ) {
foreach( $somevar as $int )
$sum = $sum + $int;
}
これが単純なkey => valueペアの配列であると仮定すると、どちらの方法でもうまくいくはずです。
PHPソリューション:
$tmp = 'a:3:{i:0;s:2:"23";i:1;s:2:"20";i:2;s:1:"9";}';
echo sum_array(unserialize($tmp));
また、メタ値を配列としてキャストし、例としてwp_count_posts()
と、それがwp-admin/edit-form-advanced.phpでどのように使用されているかを確認してください。