• 赤色のリンクは、まだ日本語Codexに存在しないページ・画像です。英語版と併せてご覧ください。(詳細

このWikiはいつでも誰でも編集できます

「関数リファレンス/update post meta」の版間の差分

提供: WordPress Codex 日本語版
移動先: 案内検索
(全体を和訳,update only the first field はウソなので削除)
(残りを和訳。)
 
(他の1人の利用者による、間の2版が非表示)
1行目: 1行目:
 +
{{CheckTrans}}
 +
 
<div id="Description">
 
<div id="Description">
 
== 説明 ==
 
== 説明 ==
 
</div>
 
</div>
  
[[関数リファレンス/update post meta|update post meta()]] は、指定した投稿に存在するカスタムフィールドの値を更新します。[[関数リファレンス/add post meta|add_post_meta()]] の代わりとしても使うことができます。この関数はまず、<tt>$post_id</tt> で ID を指定した投稿に <tt>$meta_key</tt> を持つカスタムフィールドが存在することを確認します。もし存在しなければ代わりに <tt>add_post_meta($post_id, $meta_key, $meta_value)</tt> を実行し、その結果(常に <var>true</var>)を返します。
+
<tt>update_post_meta()</tt> は、指定した投稿に存在するカスタムフィールドの値を更新します。[[関数リファレンス/add post meta|add_post_meta()]] の代わりとしても使うことができます。この関数はまず、<tt>$post_id</tt> で ID を指定した投稿に <tt>$meta_key</tt> を持つカスタムフィールドが存在することを確認します。もし存在しなければ代わりに <code>add_post_meta( $post_id, $meta_key, $meta_value )</code> を実行し、その結果を返します。
 +
 
 +
<!-- 「戻り値」セクションと内容重複するので非表示 25-Aug-2015 gblsm
 +
カスタムフィールドが存在しなければ <tt>meta_id</tt> を返します(<tt>true</tt> と判定できます)。それ以外の場合、成功すれば <tt>true</tt>、失敗すれば <tt>false</tt> を返します。また、与えられた値がすでにデータベースにある値と一致したときも <tt>false</tt> を返します。 -->
 +
 
 +
'''注意:''' もしデータベースの照合順序が大文字小文字を区別する(照合順序名に <tt>_ci</tt> が付く)場合、<tt>update_post_meta()</tt>、<tt>[[関数リファレンス/delete_post_meta|delete_post_meta()]]</tt>、<tt>[[テンプレートタグ/get_posts|get_posts()]]</tt> は、大文字と小文字のキーを区別せずにレコードを更新・削除・クエリします。しかし <tt>[[関数リファレンス/get_post_meta|get_post_meta()]]</tt> は大文字・小文字を区別する場合があります。これは [[クラスリファレンス/WP_Object_Cache|WordPress のキャッシュ]] によるものです。詳しくは https://core.trac.wordpress.org/ticket/18210 を参照してください。大文字・小文字を混ぜないよう、気をつけてください。
  
 
<div id="Usage">
 
<div id="Usage">
9行目: 16行目:
 
</div>
 
</div>
  
  <?php update_post_meta($post_id, $meta_key, $meta_value, $prev_value); ?>  
+
  <?php update_post_meta( $post_id, $meta_key, $meta_value, $prev_value ); ?>  
  
 
<div id="Parameters">
 
<div id="Parameters">
16行目: 23行目:
  
 
{{Parameter|$post_id|整数|更新したいカスタムフィールドを持つ投稿の ID。}}
 
{{Parameter|$post_id|整数|更新したいカスタムフィールドを持つ投稿の ID。}}
{{Parameter|$meta_key|文字列|更新したいカスタムフィールドのキー。}}
+
{{Parameter|$meta_key|文字列|更新したいカスタムフィールドのキー。これは生の値でなければなりません(データベースクエリ時は無害化されます)。}}
{{Parameter|$meta_value|文字列|カスタムフィールドの新しい値。}}
+
{{Parameter|$meta_value|mixed|カスタムフィールドの新しい値。配列を与えるとシリアル化されます。これは生の値でなければなりません(データベースクエリ時は無害化されます)。}}
{{Parameter|$prev_value|文字列|更新したいカスタムフィールドの元の値。これは、同じキーを持つカスタムフィールドを区別するパラメータです。省略すると、指定したキーを持つカスタムフィールドはすべて値が更新されます。|オプション}}
+
{{Parameter|$prev_value|mixed|更新したいカスタムフィールドの元の値。これは、同じキーを持つカスタムフィールドを区別するパラメータです。省略すると、指定したキーを持つカスタムフィールドはすべて値が更新されます。|オプション|<nowiki>''</nowiki>}}
 +
 
 +
<div id="Return_Values">
 +
== 戻り値 ==
 +
</div>
 +
 
 +
; (mixed) : カスタムフィールドが存在しなければ <tt>meta_id</tt> を返します(<tt>true</tt> と判定できます)。それ以外の場合、成功すれば <tt>true</tt>、失敗すれば <tt>false</tt> を返します。また、与えられた値がすでにデータベースにある値と一致したときも <tt>false</tt> を返します。
  
 
<div id="Examples">
 
<div id="Examples">
33行目: 46行目:
 
===その他の例===
 
===その他の例===
  
ID が76の投稿に、以下の4つのカスタムフィールドがある場合:
+
ID が 76 の投稿に、以下の 4 つのカスタムフィールドがある場合:
  
<div style="border:1px solid blue; width:50%; padding:0 20px">
+
<div style="border:1px solid blue; width:50%; padding:0 20px"><tt>
 
[key_1] => 'Happy'<br/>
 
[key_1] => 'Happy'<br/>
 
[key_1] => 'Sad'<br/>
 
[key_1] => 'Sad'<br/>
 
[key_2] => 'Gregory'<br/>
 
[key_2] => 'Gregory'<br/>
 
[my_key] => 'Steve'
 
[my_key] => 'Steve'
</div>
+
</tt></div>
  
 
<tt>key_2</tt> のキーを持つカスタムフィールドの値を ''Hans'' に変更するには:
 
<tt>key_2</tt> のキーを持つカスタムフィールドの値を ''Hans'' に変更するには:
  <?php update_post_meta(76, 'key_2', 'Hans'); ?>
+
  <?php update_post_meta( 76, 'key_2', 'Hans' ); ?>
  
<tt>key_1</tt> のキーを持つカスタムフィールドで値を ''Sad'' から ''Happy'' に変更するには:
+
<tt>key_1</tt> のキーを持つカスタムフィールドで値を ''Sad'' から ''Warm'' に変更するには:
  <?php update_post_meta(76, 'key_1', 'Happy', 'Sad'); ?>
+
  <?php update_post_meta( 76, 'key_1', 'Warm', 'Sad' ); ?>
  
 
この結果、カスタムフィールドは以下のようになります:
 
この結果、カスタムフィールドは以下のようになります:
  
<div style="border:1px solid blue; width:50%; padding:0 20px">
+
<div style="border:1px solid blue; width:50%; padding:0 20px"><tt>
[key_1] => 'Happy'<br/>
+
 
[key_1] => 'Happy'<br/>
 
[key_1] => 'Happy'<br/>
 +
[key_1] => 'Warm'<br/>
 
[key_2] => 'Hans'<br/>
 
[key_2] => 'Hans'<br/>
 
[my_key] => 'Steve'
 
[my_key] => 'Steve'
</div>
+
</tt></div>
  
 
'''''注:''' この関数は、条件に一致するすべてのカスタムフィールドを変更します。''
 
'''''注:''' この関数は、条件に一致するすべてのカスタムフィールドを変更します。''
 +
<!-- 原文(条件に一致する最初の…)とどちらが正しい? 25-Aug-2015 gblsm
 +
'''''Note:''' This function will update only the first field that matches the criteria.''
 +
-->
 +
 +
最初の <tt>key_1</tt> のキーを持つカスタムフィールドの値を ''Happy'' から ''Excited'' に変更するには:
  
始めの <tt>key_1</tt> のキーを持つカスタムフィールドの値を ''Happy'' から ''Excited'' に変更するには:
 
 
<pre><?php  
 
<pre><?php  
   update_post_meta(76, 'key_1', 'Excited', 'Happy');
+
   update_post_meta( 76, 'key_1', 'Excited', 'Happy' );
  
 
   // または
 
   // または
  
   update_post_meta(76, 'key_1', 'Excited');
+
   update_post_meta( 76, 'key_1', 'Excited' );
 +
 
 +
  // キー "key_1" を持つすべてのフィールドを更新するには:
 +
 
 +
  $key1_values = get_post_custom_values( 'key_1', 76 );
 +
  foreach ( $key1_values as $value )
 +
    update_post_meta( 76, 'key_1', 'Excited', $value );
 
?></pre>
 
?></pre>
  
さらに詳しい例は [[関数リファレンス/post meta 関数の例|post meta 関数の例]] を見てください。
+
さらに詳しい例は [[関数リファレンス/post meta 関数の例|post_meta 関数の例]] を見てください。
 +
 
 +
<div id="Character_Escaping">
 +
== 文字のエスケープ ==
 +
</div>
 +
 
 +
カスタムフィールドの値は <tt>[http://php.net/stripslashes stripslashes()]</tt> 関数を通してから保存されるので、エスケープ文字「<tt>\</tt>」を含む値を渡すときは注意が必要です(例えば JSON)。
 +
 
 +
=== エスケープした値が保存されない ===
 +
 
 +
JSON の値が <tt>{"key":"value with \"escaped quotes\""}</tt> である場合:
 +
<pre><?php
 +
$escaped_json = '{"key":"value with \\"escaped quotes\\""}';
 +
update_post_meta( $id, 'escaped_json', $escaped_json );
 +
$broken = get_post_meta( $id, 'escaped_json', true );
 +
/*
 +
$broken が stripslashes() を通されてパースできなくなる:
 +
{"key":"value with "escaped quotes""}
 +
*/
 +
?></pre>
 +
 
 +
=== 回避方法 ===
 +
 
 +
関数 <tt>wp_slash()</tt>(WordPress 3.6 で導入)を使って「<tt>\</tt>」によるエスケープを 1 レベル増やすことにより、<tt>stripslashes()</tt> の呼び出しを相殺できます:
 +
<pre><?php
 +
$escaped_json = '{"key":"value with \\"escaped quotes\\""}';
 +
update_post_meta( $id, 'double_escaped_json', wp_slash( $escaped_json ) );
 +
$fixed = get_post_meta( $id, 'double_escaped_json', true );
 +
/*
 +
$fixed は stripslashes() の後に、思ったとおり保存される:
 +
{"key":"value with \"escaped quotes\""}
 +
*/
 +
?></pre>
 +
 
 +
== 参考 ==
 +
* この関数は <tt>[[関数リファレンス/update_metadata | update_metadata()]] /[[:en:Function_Reference/update_metadata|en]]</tt> を使用します。
 +
 
 +
== ソースコード ==
 +
 
 +
<tt>update_post_meta()</tt> は {{Trac|wp-includes/post.php}} にあります。
 +
 
 +
== 更新履歴 ==
 +
 
 +
新規導入: [[Version 1.5|1.5.0]]
  
 
<div id="Related">
 
<div id="Related">
77行目: 143行目:
  
 
{{Tag Footer}}
 
{{Tag Footer}}
{{原文|Function Reference/update post meta|82577}}<!-- 19:34, 2 February 2010 Mslade -->
+
 
[[Category:Functions]]
+
{{原文|Function Reference/update post meta|143740}} <!-- 00:41, 23 May 2014 Sboisvert  -->
 +
 
 +
{{DEFAULTSORT:Update_post_meta}}
 +
[[Category:関数]]
 +
 
 
[[en:Function Reference/update post meta]]
 
[[en:Function Reference/update post meta]]

2015年8月25日 (火) 21:08時点における最新版

この項目「関数リファレンス/update post meta」は、翻訳チェック待ちの項目です。加筆、訂正などを通して、Codex ドキュメンテーションにご協力下さい。

update_post_meta() は、指定した投稿に存在するカスタムフィールドの値を更新します。add_post_meta() の代わりとしても使うことができます。この関数はまず、$post_id で ID を指定した投稿に $meta_key を持つカスタムフィールドが存在することを確認します。もし存在しなければ代わりに add_post_meta( $post_id, $meta_key, $meta_value ) を実行し、その結果を返します。


注意: もしデータベースの照合順序が大文字小文字を区別する(照合順序名に _ci が付く)場合、update_post_meta()delete_post_meta()get_posts() は、大文字と小文字のキーを区別せずにレコードを更新・削除・クエリします。しかし get_post_meta() は大文字・小文字を区別する場合があります。これは WordPress のキャッシュ によるものです。詳しくは https://core.trac.wordpress.org/ticket/18210 を参照してください。大文字・小文字を混ぜないよう、気をつけてください。

使い方

<?php update_post_meta( $post_id, $meta_key, $meta_value, $prev_value ); ?> 

パラメータ

$post_id
整数) (必須) 更新したいカスタムフィールドを持つ投稿の ID。
初期値: なし
$meta_key
文字列) (必須) 更新したいカスタムフィールドのキー。これは生の値でなければなりません(データベースクエリ時は無害化されます)。
初期値: なし
$meta_value
mixed) (必須) カスタムフィールドの新しい値。配列を与えるとシリアル化されます。これは生の値でなければなりません(データベースクエリ時は無害化されます)。
初期値: なし
$prev_value
mixed) (オプション) 更新したいカスタムフィールドの元の値。これは、同じキーを持つカスタムフィールドを区別するパラメータです。省略すると、指定したキーを持つカスタムフィールドはすべて値が更新されます。
初期値: ''

戻り値

(mixed) 
カスタムフィールドが存在しなければ meta_id を返します(true と判定できます)。それ以外の場合、成功すれば true、失敗すれば false を返します。また、与えられた値がすでにデータベースにある値と一致したときも false を返します。

用例

デフォルトの使い方

ID が76の投稿で、キーが my_key のカスタムフィールドの値を Steve に変更します。

<?php update_post_meta(76, 'my_key', 'Steve'); ?>

その他の例

ID が 76 の投稿に、以下の 4 つのカスタムフィールドがある場合:

[key_1] => 'Happy'
[key_1] => 'Sad'
[key_2] => 'Gregory'
[my_key] => 'Steve'

key_2 のキーを持つカスタムフィールドの値を Hans に変更するには:

<?php update_post_meta( 76, 'key_2', 'Hans' ); ?>

key_1 のキーを持つカスタムフィールドで値を Sad から Warm に変更するには:

<?php update_post_meta( 76, 'key_1', 'Warm', 'Sad' ); ?>

この結果、カスタムフィールドは以下のようになります:

[key_1] => 'Happy'
[key_1] => 'Warm'
[key_2] => 'Hans'
[my_key] => 'Steve'

注: この関数は、条件に一致するすべてのカスタムフィールドを変更します。

最初の key_1 のキーを持つカスタムフィールドの値を Happy から Excited に変更するには:

<?php 
  update_post_meta( 76, 'key_1', 'Excited', 'Happy' );

  // または

  update_post_meta( 76, 'key_1', 'Excited' );

  // キー "key_1" を持つすべてのフィールドを更新するには:

  $key1_values = get_post_custom_values( 'key_1', 76 );
  foreach ( $key1_values as $value )
    update_post_meta( 76, 'key_1', 'Excited', $value );
?>

さらに詳しい例は post_meta 関数の例 を見てください。

文字のエスケープ

カスタムフィールドの値は stripslashes() 関数を通してから保存されるので、エスケープ文字「\」を含む値を渡すときは注意が必要です(例えば JSON)。

エスケープした値が保存されない

JSON の値が {"key":"value with \"escaped quotes\""} である場合:

<?php
$escaped_json = '{"key":"value with \\"escaped quotes\\""}';
update_post_meta( $id, 'escaped_json', $escaped_json );
$broken = get_post_meta( $id, 'escaped_json', true );
/*
$broken が stripslashes() を通されてパースできなくなる:
{"key":"value with "escaped quotes""}
*/
?>

回避方法

関数 wp_slash()(WordPress 3.6 で導入)を使って「\」によるエスケープを 1 レベル増やすことにより、stripslashes() の呼び出しを相殺できます:

<?php
$escaped_json = '{"key":"value with \\"escaped quotes\\""}';
update_post_meta( $id, 'double_escaped_json', wp_slash( $escaped_json ) );
$fixed = get_post_meta( $id, 'double_escaped_json', true );
/*
$fixed は stripslashes() の後に、思ったとおり保存される:
{"key":"value with \"escaped quotes\""}
*/
?>

参考

ソースコード

update_post_meta()wp-includes/post.php にあります。

更新履歴

新規導入: 1.5.0


カスタムフィールド: the_meta(), get_post_meta(), add_post_meta(), update_post_meta(), delete_post_meta(), get_post_custom(), get_post_custom_values(), get_post_custom_keys() (post_meta 関数の例 /en も参照)


関数リファレンステンプレートタグ目次もご覧ください。


最新英語版: WordPress Codex » Function Reference/update post meta最新版との差分