質問

わかりました、それで私は使っています WPアルケミークラス 投稿書き込みページでカスタム フィールド書き込みパネルを作成しました。これまでのところ、すべてが順調に進んでいます...ただし、私には理解できない問題が 1 つあります。「イベント日付」のカスタムフィールド値を使用して、カスタムページテンプレート上のイベントを並べ替えようとしています。

私は指示に従いました 「カスタムフィールドに基づいて値で並べ替えられたクエリ」 コーデックスでカスタム クエリを設定しようとしているのが見つかりましたが、機能していないようです。

これは、「」のカスタム ページ テンプレートのコードです。イベント" ページ:

<?php
/* 
  Template Name: Events
*/
get_header();
?>
<div id="depthead" class="grid_12">
  <h2>Upcoming Events</h2>
</div><!--/depthead-->
<?php

$querystr = "
  SELECT wposts.* 
  FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
  WHERE wposts.ID = wpostmeta.post_id 
  AND wpostmeta.meta_key = '_events_meta[event_date]' 
  AND wposts.post_type = 'post'

  ORDER BY wpostmeta.meta_value DESC
";
$pageposts = $wpdb->get_results($querystr, OBJECT);

?>
<?php if ($pageposts): global $post; $cnt=0; foreach ($pageposts as $post): $cnt++; setup_postdata($post); ?>
<div id="article-<?php echo get_the_ID(); ?>" class="listingbox grid_3">
  <div class="deptpostimg">
    <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><img src="<?php echo $events_metabox->get_the_value('event_thumbnail'); ?>" style="outline:1px solid #000" alt="<?php the_title_attribute(); ?>" /><span class="event-date"><?php $events_metabox->the_value('event_date'); ?></span></a>
  </div><!--/deptpostimg-->
  <h4 class="listing-titles"><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h4>
  <div class="excerpt">
    <?php the_excerpt(); ?>
  </div><!--/excerpt-->
</div><!--/article-<?php echo get_the_ID(); ?>-->
<?php if($cnt % 4 == 0) { ?>
<div class="grid_12 rowseparator">
  <hr />
</div><!--/rowseparator-->
<?php } ?>
<?php endforeach; endif; ?>
</div><!--/wrapper-->
<?php get_footer(); ?>

カスタムフィールドキーを取得していないような気がします...これらのカスタム書き込みパネルの作成に使用しているクラスは、それらをすべて配列として保存します。そのため、以下を使用してアクセスしようとしました。 _events_meta[event_date]

おそらくそれが問題なのですが、問題がある場合はどうすればよいのかわかりません...

何か案は?


編集: これは、カスタム フィールドがデータベースにどのように保存されているかを示す画像です。それが一体なぜなのかを理解するのに役立つことを願っています _events_meta[event_date] クエリでは機能しないのでしょうか?

WordPress データベースの挿入クエリを含む PHPMyAdmin のスクリーンショット http://staticloader.com/phpmyadmin.png

役に立ちましたか?

解決

ジョシュ、ご覧ください: http://farinspace.com/wpalchemy-metabox-data-storage-modes/ ...

私は、wpalchemyがデフォルトで値を保存する方法を変えると考えています...抽出モードをデフォルトにする...

他のヒント

イベントに関するカスタムフィールドを備えたブログも入手しました。query_posts() 関数と組み合わせて使用​​したクエリは次のとおりです。

query_posts($query_string . "&meta_key=event_date_end&meta_compare=>=&meta_value=".date('Y-m-d')."&meta_key=event_date_start&orderby=meta_value&order=ASC");

これは、event_date という名前のカスタム フィールドを持つすべての投稿を選択し、現在の日付と比較し (古いイベントを除外するため)、event_start_date という別のカスタム フィールドで並べ替えます。この複雑な例で、query_posts() 関数を正しく使用する方法がわかることを願っています。

カスタム フィールドの存在のみをテストする単純な選択は次のようになります。

query_posts('meta_key=event_date'); 

カスタム フィールドの単純な ORDER BY は次のようになります。

query_posts('meta_key=event_date&orderby=meta_value&order=ASC');

で多くの例を見ることができます。 query_posts() 関数の API の説明.

やあ @ジョシュ:

クエリは正常に機能します。 それはおそらくあなたのものです $events_metabox 変数はスコープではなく、コードが失敗するだけです(奇妙なことに、フッターを実行します。なぜなら、理由はDunnoです。)最初にテンプレートのトップでグローバルに設定してみてください。

global $events_metabox

それがうまくいかない場合、あなたのコードが何をしているのかわからないので、他の方法で問題を追跡する必要があります $events_metabox.

増分除去を使用してデバッグします print_r()

このような問題に遭遇したら、問題を解決するまでピースを取り除き始めます。クエリが機能しているかどうかを確認しようとしている場合は、 print_r() 包まれた値をダンプします <pre> 何が起こっているのかを見ることができるようにタグ、つまり:

<?php
$pageposts = $wpdb->get_results($querystr, OBJECT);
echo '<pre>';
print_r($pageposts);
echo '<pre>';

また、使用してください get_posts() 直接SQLの代わりに

そうは言っても、私は 非常に クエリをaに置き換えることをお勧めします get_posts() 電話。 WordPressのベストプラクティスです 常にWordPress APIを使用し、クエリ関数です直接SQLを使用しないでください それを回避する方法がまったくない限り。組み込みのキャッシングなど、多くの利点があります。場合によっては、特に知らない限り、公開された投稿のみが表示されるようにするなどの利点があり、将来データベース構造を変更すると壊れる可能性が低くなります。

これが次のとおりです get_posts() ハードコーディングされたSQLクエリを交換する必要があります( いくつかの注意事項):

$pageposts = get_posts('meta_key=_events_meta[event_date]&orderby=meta_value&order=ASC');

または、この同等物はまったく同じことをします:

$pageposts = get_posts(array(
  'meta_key' => '_events_meta[event_date]',
  'orderby'  => 'meta_value',
  'order'    => 'ASC',
));

警告 私は、あなたのクエリが公開されていない、ドラフトなどを除外しなかったと言いました。私の推測は何ですか get_posts() とにかくあなたが望むものがもっともっともっとそうですか。

コーデックスのドキュメント get_posts()

のドキュメント get_posts() ここにある:

しかし、興味深いことに より良いドキュメント get_posts() 議論があります query_posts() ページ おそらくあなたのニーズに使用することもできます。私はより大きな制御を好みます get_posts() しかし ymmv.

ともかく、 query_posts() 実際に電話してください get_posts() したがって、議論は本当に同じです:

ライセンス: CC-BY-SA帰属
所属していません wordpress.stackexchange
scroll top