hidakaya
メンバー
2 years前の投稿 #
カスタムフィールドを使って商品詳細を表示しようと考えています。
そのさい、項目が順番どおりにならないことに気づきました。
(管理画面ではちゃんとソートされるのですが)
試しにキーの値を
01
02
03
04
05
と数字で入力しても
01
05
02
03
04
と言う様に表示されてしまいます。
投稿によって表示のされ方が違うようです。
singlepage.phpで商品ページを投稿しているのですが、
singlepage.phpはほかの投稿(日記やお知らせなど)
にも使う予定なので、以下のようにget_post_meta()
を使わないようにしたいです。
- <?php echo get_post_meta($post->ID,"色",true); ?>
- <?php echo get_post_meta($post->ID,"サイズ",true); ?>
- <?php echo get_post_meta($post->ID,"素材",true); ?>
- <?php echo get_post_meta($post->ID,"価格",true); ?>
そもそもこういう様な使い方が間違っている、または想定されていないのでしょうか?
解決できるようなプラグインや方法がありましたら教えてください。
よろしくお願いいたします。
え~っと。勘違いしていたらごめんなさい。
まず、「そのさい、項目が順番どおりにならないことに気づきました。」とは
Aの投稿では
・色
・サイズ
・素材
・価格
になるのに、Bの投稿では
・サイズ
・価格
・色
・素材
のように、順不同になってしまう、ということでよいでしょうか。
で、「ほかの投稿(日記やお知らせなど)にも使う予定なので、以下のようにget_post_meta()を使わないようにしたい」とは、
<?php echo get_post_meta($post->ID,"色",true); ?>の記述をソースに入れてしまうとカスタムフィールドがない日記やお知らせにも表示されるからイヤみたいなことでしょうかね?
だと、仮定して・・・
get_post_meta()の記述をis_category()で囲ってしまえばどうでしょう。商品ページの投稿と日記の投稿とお知らせの投稿の投稿カテゴリが違っていれば実現可能だと思います。
mick_ltc
メンバー
2 years前の投稿 #
カスタムフィールドは、表示する際は記事に追加した順に表示されてた気がします。
下記のように書いてやれば、値の設定されているキーだけを表示します。
<?php
$keys = get_post_custom_keys();
if ($keys) {
foreach ($keys as $key) {
if ( "_" != substr($key,0,1)) {
$outdata .= $key.'<br />';
$valuearray = get_post_custom_values($key);
$outdata .= implode(",",$valuearray).'<br />';
}
}
echo $outdata;
}
?>
これは何も考えずにechoしてるだけなのでアレですが、
いったん配列に入れてやって、ソートをかけてやればいいんじゃないかな・・・と。
hidakaya
メンバー
2 years前の投稿 #
>shokun0803さん
言葉が足らずにすみませんでした。
お察し通り、順不同に表示されてしまうんです。
どうも管理画面でなんどもキーを追加したり削除したりしたのがまずかったみたいですね。
>>get_post_meta()の記述をis_category()で囲ってしまえばどうでしょう。
おお、そういう発想がありましたか!家に帰ったら早速試してみます。
ありがとうございます、また報告します!
hidakaya
メンバー
2 years前の投稿 #
>mick_ltcさん
やっぱりソートには配列を使わなきゃ駄目ですよね。
WordPressをいじってるのに何いってんだって言われそうですが、
プログラムが苦手でしてorz
でも、ありがとうございます。そこだけ調べて実装も考えて見ます。
最終的に自分以外の人が更新するので、何も考えずにカスタムフィールドの
登録が出来るのに越したことはないので。
hidakaya
メンバー
2 years前の投稿 #
>shokun0803さん
>mick_ltcさん
うまくいきました。ありがとうございました!