【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つ取得してみます。

最新記事の取得結果1

全く同じ記事を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で最もポピュラーなグローバル変数です。

それ故に、トラブルの原因にもなりやすいので注意しましょう。