【WordPress】自作した関数を使うときはグローバル変数を定義しているか注意
今回は、WordPressで自作した関数を呼び出す場合の注意点です。
今回の話の結論としては、関数内で「global $post」を記述しているか、という点です。
例として、任意の数の最新記事を取得する関数を利用する場合で考えます。
記事の数は、関数を呼び出す際に引数として渡します。
「global $post」を記述していない場合
「global $post」を記述していない場合の関数のコードは以下の通りです。
function my_get_posts($per_page){
$myposts = get_posts(array(
'posts_per_page' => $per_page,
'orderby' => 'date',
'order' => 'DESC',
'post_type' => 'post',
'post_status' => 'publish'));
$prefix_content = '<ul>';
foreach($myposts as $post):
setup_postdata($post);
$prefix_content.= '<li>';
$prefix_content.= get_the_date();
$prefix_content.= get_the_title();
$prefix_content.='</li>';
endforeach;
$prefix_content .= '</ul>';
echo $prefix_content;
}
引数である$per_pageに、取得する投稿の数を渡します。
上の関数を使って、最新記事を4つ取得してみます。

全く同じ記事を4つ取得しています。
次に、「global $post」を記述した場合について見ていきます。
「global $post」を記述した場合
先程の関数の冒頭に、「global $post」を追記します。
function my_get_posts($per_page){
global $post;
$myposts = get_posts(array(
'posts_per_page' => $per_page,
'orderby' => 'date',
'order' => 'DESC',
'post_type' => 'post',
'post_status' => 'publish'));
$prefix_content = '<ul>';
foreach($myposts as $post):
setup_postdata($post);
$prefix_content.= '<li>';
$prefix_content.= get_the_date();
$prefix_content.= get_the_title();
$prefix_content.='</li>';
endforeach;
$prefix_content .= '</ul>';
echo $prefix_content;
}
「$post」はWordPress内で定義されているグローバル変数で、投稿に関する様々な情報が格納されます。
「global $post」を追記して呼び出した結果です。投稿日付の新着順に表示されています。

終わりに
$postはWorePressで最もポピュラーなグローバル変数です。
それ故に、トラブルの原因にもなりやすいので注意しましょう。
ディスカッション
コメント一覧
まだ、コメントがありません