私はWordPressサイトに取り組んでいて、アーカイブページとカテゴリページの2列に投稿を表示するために次のコードを使用します。
<div id="post-<?php the_ID(); ?>" <?php post_class( 0 === ++$GLOBALS['wpdb']->current_post % 2 ? 'grid col-340 fit' : 'grid col-340' ); ?>>
Debugを "true"に設定すると、次のようになります。
Notice:未定義のプロパティ:D:\ beta\www.beta.dev\wp-includes\wp-db.php内のwpdb :: $ current_post 684行
このコードの何が問題になる可能性がありますか?私はこの通知がWordPressのバージョン4以降で登場したことに気づきました
任意の助けは大歓迎です。ありがとう。
この部分には問題があります。
++$GLOBALS['wpdb']->current_post
wpdb
クラスのcurrent_post
プロパティはありません。ここでは、wpdb
クラスとWP_Query
クラスを混同している可能性があります。
また、一般的にグローバルなcurrent_post
のWP_Query
プロパティを変更したくはありません。グローバルを混乱させれば確実に「噛む」かもしれません;-)
current_post
のWP_Query
プロパティはすでに$this->current_post++
を使ってカウントしていることに注意してください。 next_post()
の中で、それはthe_post()
の中で呼ばれます。 ここ を参照してください。そのため、ループ内で手動で(++)増やす必要はありません。
これは、static変数の助けを借りて、post_class
フィルタを使用した例です。
add_filter( 'post_class', function( $classes )
{
static $instance = 0;
if( in_the_loop() )
$classes[] = ( 0 === $instance++ % 2 ) ? 'even' : 'odd';
return $classes;
} );
ここではメインクエリループ内のpostクラスをターゲットにしています。偶数/奇数クラスやその他の制限を自分のニーズに合わせて変更することを忘れないでください。
post_class
フィルタを使用すると、テンプレート部分の再利用性が向上する可能性があります。
@ toschoのone-liner answer の最初のバージョンを使用していて、グローバルなwpdb
オブジェクトの(カウント用の)カスタムcurrent_post
プロパティを作成しているようです。それから彼はwpse_post_counter
のように接頭辞の付いたカスタムプロパティを使うことを提案しました。しかし、PHPの通知を避けるために初期化が必要なようです。
@kaiserは、グローバルなcurrent_post
の$wp_query
プロパティを使用する(おそらくグローバルな$wpdb
ではない)素晴らしい答えを投稿しました here 。
anonymous関数とglobal変数に関して、ここで promiseを与えたので なので、書き直すべきです:私の editを見てくださいここで - ここではuse
キーワードを使用してグローバル$wp_query
オブジェクトを渡します。