関数に変換したいコードがいくつかあります。私はそれを上記の関数でラップするまでそれは素晴らしい作品。
$args = array(
'posts_per_page' => -1,
'post_type' => 'asset',
'category_name' => $cat
);
$cat_query = new WP_Query( $args );
$matching_category_ids = array();
while ( $cat_query->have_posts() ) : $cat_query->the_post();
array_Push($matching_category_ids, $post->ID);
endwhile;
関数は次のようになります。
function grab_ids_in_category($cat) {
//stuff from above here
return $matching_category_ids;
}
何がおかしいのですか?
簡単です、$post
をコンテキスト外でアドレス指定しています。
標準のWordPressループを実行しているとき、WPは現在のクエリの結果を含むグローバル$post
変数をロードします。これにはID、タイトル、コンテンツ、投稿メタなどが含まれます。ループ関数はこのグローバル変数を参照して実際にデータを提供します。
例えば、通常の関数get_the_ID()
を取ります。
function get_the_ID() {
global $post;
return $post->ID;
}
上のコードのどこかで、おそらく$post
変数をglobal
izingしているので、あなたのコードは関数の外でうまく動くでしょう。だからあなたの$post->ID
への直接参照はうまくいきます。
しかし、このコードを関数内でラップすると、は$post
をグローバルとして参照していません。そのため、local$post->ID
は未定義のため、$post
は何も返しません。
$post->ID
を直接参照する代わりに、通常のループ関数get_the_ID()
を使用してください。
while ( $cat_query->have_posts() ) : $cat_query->the_post();
array_post( $matching_category_ids, get_the_ID() );
endwhile;
このようにグローバル変数$ postを関数に追加する必要があります。
function grab_ids_in_category($cat) {
global $post;
$args = array(
'posts_per_page' => -1,
'post_type' => 'asset',
'category_name' => $cat
);
$cat_query = new WP_Query( $args );
$matching_category_ids = array();
while ( $cat_query->have_posts() ) : $cat_query->the_post();
array_Push($matching_category_ids, $post->ID);
endwhile;
return $matching_category_ids;
}
// echo the Query and pass a category name
echo grab_ids_in_category('category_name');