urlencode() expects parameter 1 to be string …PHP警告がでた原因

WordPress

ショートコードでカテゴリを選んで新着投稿記事を出力しようとしていたところ思うような出力にならず、ログを確認したところ以下のようなPHPwarningが。

PHP Warning:  urlencode() expects parameter 1 to be string, array given in /wp-includes/formatting.php on line 5501

文字列であるべきところに配列がある場合に出る警告とのことです。

改めてコードを確認してみてわかりました。

間違った記述

$args = array(
	'post_type'   => 'post',
	'category_name'=> array( 'info', 'item' ),
	'post_status' => 'publish',
	'posts_per_page' => 10,
	'orderby'     => 'desc'
);

3行目のカテゴリスラッグを複数指定する際、array()で囲っていました。

正しくは

$args = array(
	'post_type'   => 'post',
	'category_name'=> 'info,item',
	'post_status' => 'publish',
	'posts_per_page' => 10,
	'orderby'     => 'desc'
);

お恥ずかしいケアレスミスでした。。。

カテゴリに関連づけられた記事を表示したいときに

カテゴリーのパラメータ

$args = array(
'cat' => 5, //整数int、カテゴリID
'category_name'=> 'info,item', //文字列string、カテゴリースラッグ
'category__and' => array( 1, 3 ), //配列array、カテゴリID
'category__in' => array( 1, 3 ), //配列array、カテゴリID
'category__not_in' => array( 1, 3 )  //配列array、カテゴリID
);

cat

カテゴリIDを指定する

'cat' => 5,

除外したいカテゴリを指定

'cat' => -7,

category_name

カテゴリスラッグを指定する

'category_name'=> 'info',

カテゴリスラッグを複数指定する

カテゴリinfoまたはitemのいずれかに属するカテゴリ

'category_name'=> 'info,item', 

カテゴリinfo,itemどちらにも属する記事

'category_name'=> 'info+item', 

category__in

カテゴリID (子カテゴリは含まない)記事を表示する

'category__in' => 3,

カテゴリ1と3のいずれかに属する(小カテゴリ は含まない)記事を表示する

'category__in' => array( 1, 3 ) ,

category__and

カテゴリ1と3の両方に属する記事を表示する

'category__and' => array( 1, 3 ),

category__not_in

カテゴリ1と3に属さない記事を表示する

'category__not_in' => array( 1, 3 ) 

'cat' => 5,//(int) - use category id.
'category_name' => 'staff, news', //(string) - 指定したカテゴリーのいずれかに属する投稿を表示する。カテゴリースラッグで指定する。
'category_name' => 'staff+news', //(string) - 指定したカテゴリーの「全て」を持つ投稿を表示する。カテゴリースラッグで指定する。
'category__and' => array( 2, 6 ), //(array) - カテゴリーIDを指定する。
'category__in' => array( 2, 6 ), //(array) - カテゴリーIDを指定する。
'category__not_in' => array( 2, 6 ),

WordPress

Posted by ともろう