WP挿入ポストPHP関数とカスタムフィールド
4 回答
- 投票
-
- 2011-02-04
wp_insert_post
のドキュメントを読むと、作成したばかりの投稿の投稿ID.これを次の関数
__update_post_meta
(このサイトから取得して少し調整したカスタム関数)と組み合わせると/** * Updates post meta for a post. It also automatically deletes or adds the value to field_name if specified * * @access protected * @param integer The post ID for the post we're updating * @param string The field we're updating/adding/deleting * @param string [Optional] The value to update/add for field_name. If left blank, data will be deleted. * @return void */ public function __update_post_meta( $post_id, $field_name, $value = '' ) { if ( empty( $value ) OR ! $value ) { delete_post_meta( $post_id, $field_name ); } elseif ( ! get_post_meta( $post_id, $field_name ) ) { add_post_meta( $post_id, $field_name, $value ); } else { update_post_meta( $post_id, $field_name, $value ); } }
次の情報が表示されます:
$my_post = array( 'post_title' => $_SESSION['booking-form-title'], 'post_date' => $_SESSION['cal_startdate'], 'post_content' => 'This is my post.', 'post_status' => 'publish', 'post_type' => 'booking', ); $the_post_id = wp_insert_post( $my_post ); __update_post_meta( $the_post_id, 'my-custom-field', 'my_custom_field_value' );
If you read the documentation for
wp_insert_post
, it returns the post ID of the post you just created.If you combine that with the following function
__update_post_meta
(a custom function I acquired from this site and adapted a bit)/** * Updates post meta for a post. It also automatically deletes or adds the value to field_name if specified * * @access protected * @param integer The post ID for the post we're updating * @param string The field we're updating/adding/deleting * @param string [Optional] The value to update/add for field_name. If left blank, data will be deleted. * @return void */ public function __update_post_meta( $post_id, $field_name, $value = '' ) { if ( empty( $value ) OR ! $value ) { delete_post_meta( $post_id, $field_name ); } elseif ( ! get_post_meta( $post_id, $field_name ) ) { add_post_meta( $post_id, $field_name, $value ); } else { update_post_meta( $post_id, $field_name, $value ); } }
You'll get the following:
$my_post = array( 'post_title' => $_SESSION['booking-form-title'], 'post_date' => $_SESSION['cal_startdate'], 'post_content' => 'This is my post.', 'post_status' => 'publish', 'post_type' => 'booking', ); $the_post_id = wp_insert_post( $my_post ); __update_post_meta( $the_post_id, 'my-custom-field', 'my_custom_field_value' );
-
どうもありがとう.移植についてのアイデアを教えていただけませんか.IE.コードのどれがどこに行くのか.どうもありがとうThanks very much. Could you possibly give me an idea on the implantation. IE. which but of code goes where. Many Thanks
- 0
- 2011-02-04
- Robin I Knight
-
よくできました.2番目のコードブロックがあなたのコードブロックに置き換わります.関数値はカスタムフィールドのキーと値のペアです.関数をスクリプトの先頭に配置するか、スクリプトの先頭に含まれる別の.phpファイルに配置します.Nicely done. The second code block replaces yours, the function values is the custom field key/value pair. Put the function either at the top of the script, or in a separate .php file included at the top of the script.
- 2
- 2011-02-04
- aendrew
-
注意として、私はOOPを使用しているので、それが「関数」の前にある「public」修飾子の理由です.関数自体をクラスに入れずに含める場合は、 `public`を追加する必要はありません.As a note, I do use OOP so that's the reason for the `public` modifier in front of "function". If you're including the function itself without putting it into a class, you don't need to add `public`
- 1
- 2011-02-05
- Zack
-
こんにちはザック、アエンドリューとフィリップ.すべてがうまく機能していますが、クエリにも適用しようとしましたが、役に立ちませんでした.理由はよくわかりません.最初のカスタムフィールドの新しい投稿がどのように機能したかを皆さんが知っているので、ここにリンクがあります.私のエラーが表示される可能性があると思いました.http://wordpress.stackexchange.com/questions/8622/wp-insert-post-php-function-dynamically-generated-custom-fieldsHello Zack, Aendrew and Philip. Everything is working beautifully however I tried to apply it to a query as well to no avail. I don't quite see why. Here is the link since you all know how the initial custom field new post worked I thought you might see my error. http://wordpress.stackexchange.com/questions/8622/wp-insert-post-php-function-dynamically-generated-custom-fields
- 0
- 2011-02-05
- Robin I Knight
-
@ Zack-いい答えです.しかし、プラットフォーム開発者が_ "reserved" _または_(pseudo) "hidden" _関数を作成したいときに、先頭にアンダースコアが付いた名前を使用する傾向がある場合にのみ、関数名に先頭にアンダースコアを使用することを躊躇する傾向があります.それらを見ると、プラットフォーム機能だと思うかもしれませんし、さらに悪いことに、将来のWordPressコア機能と競合するかもしれません.ちょっとした考え.@Zack - Nice answer. But I would tend to shy away from using leading underscores in function names if only because names with leading underscores tend to be used by platform developers when they want to create _"reserved"_ or _(pseudo) "hidden"_ functions so people seeing those might think they are platform functions, or worse they might conflict with a future WordPress core function. Just a thought.
- 0
- 2011-02-05
- MikeSchinkel
-
@MikeSchinkel:最初は、クラス内の保護された関数に「__」を使用し始めましたが、プラグインの構造を関数をパブリックにする必要がある場所に変更しました.また、単に「update_post_meta」という名前を付けたと思いますが、それは間違いなくWordPressのコア関数と競合していました.だから私はそれを何と名付けるのか分かりませんでした:(@MikeSchinkel: At first, I originally started using "__" for protected functions within a class, but then changed the structure of my plugin to where the function needed to be public. I also would've named it simply "update_post_meta" but that would've definitely conflicted with WordPress' core functions. So I didn't know what to name it :(
- 0
- 2011-02-05
- Zack
-
@ Zack-たぶん `zacks_update_post_meta()`?:)主要なアンダースコアで言及しなかった他の問題は、同じようにクリエイティブな他の誰かがプラグインで同じ規則を使用し、したがってあなたと競合する可能性があるということです.ところで、 `update_post_meta()`が存在しない場合は追加されることをご存知ですか?`add_post_meta()`は、重複するキーを追加する場合にのみ必要です.@Zack - Maybe `zacks_update_post_meta()`? :) The other issue I didn't mention with leading underscores is that someone else equally creative may use the same convention in a plugin and thus conflict with yours. BTW, did you know that `update_post_meta()` adds if it doesn't exist? `add_post_meta()` is only needed when you want to add duplicate keys.
- 0
- 2011-02-05
- MikeSchinkel
-
@MikeSchinkel:私はもともとこのサイトの他の場所で関数を見つけて気に入って、それが好きだからという理由だけでリファクタリングしました.また、 `update_post_meta()`がすでにそれを行っていると思いましたが、確信が持てませんでした.関数を見つけたとき、私は結論に飛びつきました.@MikeSchinkel: I originally found the function elsewhere on this site, liked it, and refactored it just because I'm like that. I also figured `update_post_meta()` did that already, but couldn't be sure. When I found the function, I jumped to conclusions.
- 0
- 2011-02-05
- Zack
-
@ Zack-WordPressを学ぶのは旅です.私はまだその旅の少なくとも50%が残っていると思いますが、それ以上ではありません!@Zack - Hey learning WordPress is a journey. I figure I still have at least 50% more of that journey left, if not a lot more!
- 0
- 2011-02-05
- MikeSchinkel
-
wordpress.stackexchangeで評判がないため、回答を追加できません.今日の時点で、新しいメソッドがあります.次のように、wp_insert_postに配列を入力するだけです.meta_input=> array(key=> value)I can't add an answer, as I don't have reputation on wordpress.stackexchange. As of today there is a new method, you can simply put in an array into wp_insert_post as: meta_input => array(key=>value)
- 1
- 2016-10-15
- Frederik Witte
-
- 2011-02-05
「wp_insert_post」の後に「add_post_meta」を簡単に追加できます
<?php $my_post = array( 'post_title' => $_SESSION['booking-form-title'], 'post_date' => $_SESSION['cal_startdate'], 'post_content' => 'This is my post.', 'post_status' => 'publish', 'post_type' => 'booking', ); $post_id = wp_insert_post($my_post); add_post_meta($post_id, 'META-KEY-1', 'META_VALUE-1', true); add_post_meta($post_id, 'META-KEY-2', 'META_VALUE-2', true); ?>
You can simple add the 'add_post_meta' after the 'wp_insert_post'
<?php $my_post = array( 'post_title' => $_SESSION['booking-form-title'], 'post_date' => $_SESSION['cal_startdate'], 'post_content' => 'This is my post.', 'post_status' => 'publish', 'post_type' => 'booking', ); $post_id = wp_insert_post($my_post); add_post_meta($post_id, 'META-KEY-1', 'META_VALUE-1', true); add_post_meta($post_id, 'META-KEY-2', 'META_VALUE-2', true); ?>
-
- 2011-02-04
save_post
フィルタを使用してから、フィルタ関数でadd_post_meta
を呼び出します.Use
save_post
filter, then calladd_post_meta
in your filter function.-
役に立たない.$post-> IDは、カスタムフィールドの作成に必要なwp_insert_post_dataでは使用できません.Unhelpful. $post->ID is not available to wp_insert_post_data, which is necessary for creating custom fields.
- 0
- 2011-02-04
- aendrew
-
@aendrew `save_post`アクションは関数の最後にあり、投稿のIDとオブジェクトが渡され、答えは適切です.@aendrew `save_post` action is at the very end of the function, it has post's ID and object passed to it, answer is sound.
- 0
- 2011-02-05
- Rarst
-
ラースト、これは編集されたと確信しています.とにかく、それは今では理にかなっています.I'm pretty sure this was edited, Rarst. Regardless, it makes sense now.
- 1
- 2011-02-05
- aendrew
-
@aendrewああ、ごめんなさい-気づかなかった@aendrew ah, sorry - didn't notice that
- 0
- 2011-02-05
- Rarst
-
- 2011-02-04
wp_insert_post();で使用できるとは思いません.
その理由は、WPが2つのデータ型を格納する方法にあります.投稿は、12個の異なる列(wp_posts)を持つ1つの大きなモノリシックテーブルに格納されます.カスタムフィールドは、主にメタキーと値で構成され、投稿に関連付けられた、より単純な4列のテーブル(wp_postmeta)に格納されます.
そのため、投稿IDを取得するまで、カスタムフィールドを実際に保存することはできません.
これを試してください:
function myplugin_insert_customs($pid){ $customs = array( 'post_id' => $pid, 'meta_key' => 'Your meta key', 'meta_value' => 'Your meta value', ); add_post_meta($customs); } add_action('save_post', 'myplugin_insert_customs', 99);
このコーデックスの投稿は役に立ちました-これはあなたがしていることとは少し逆です(つまり、投稿の削除時にDB行を削除します): http://codex.wordpress.org/Plugin_API/Action_Reference/delete_post
I don't think you can use it with wp_insert_post();.
The reason is because of how WP stores the two data types. Posts are stored in one big monolithic table with a dozen different columns (wp_posts); custom fields are stored in a simpler, 4-column table (wp_postmeta) comprised mainly of a meta key and value, associated with a post.
Consequently, you can't really store custom fields until you have the post ID.
Try this:
function myplugin_insert_customs($pid){ $customs = array( 'post_id' => $pid, 'meta_key' => 'Your meta key', 'meta_value' => 'Your meta value', ); add_post_meta($customs); } add_action('save_post', 'myplugin_insert_customs', 99);
This codex post helped -- it's kinda the opposite of what you're doing (i.e., deleting a DB row upon post deletion): http://codex.wordpress.org/Plugin_API/Action_Reference/delete_post
-
その場合、私が見ることができる唯一の方法は、セッションを使用することです、それは正しいでしょうか.In that case the only way out I can see is to use a session, would that be correct.
- 0
- 2011-02-04
- Robin I Knight
-
いや;あなたのプラグインは投稿が保存されると同時にカスタムフィールドを挿入しようとしていると思いますよね?投稿が保存された後、WPにフックし、投稿の新しいID番号を取得して、それをadd_post_meta()に提供する必要があると思います.CFを作成します.すぐにいくつかのコードで答えを更新します.Nah; I'm guessing your plugin is trying to insert custom fields at the same time a post is saved, right? I think what you need to do is hook into WP after the post is saved, grab the post's new ID number, then supply that to add_post_meta(); to create the CFs. I'll update my answer in a second with some code.
- 0
- 2011-02-04
- aendrew
-
助けてくれてありがとう.ちなみにそれはプラグインではありません.必要に応じてカスタマイズできるように作成しました.(しかし、それは私がphpに長けているという意味ではなく、試行錯誤だけです)Thanks for the help. By the way its not a plugin. I wrote it so we can customise it as much as needed. (but don't take that to mean I'm any good with php, just trial and error)
- 0
- 2011-02-04
- Robin I Knight
-
それならテーマですか?唯一の本当の違いは、その場合、functions.phpにそれを入れることです.It's a theme, then? Only real difference is you'd put that in functions.php, in that case.
- 0
- 2011-02-04
- aendrew
WordPress機能は、プログラムでデータを送信するために使用されます.コンテンツ、抜粋、タイトル、日付などを含めるために送信する標準フィールド.
ドキュメントがないのは、カスタムフィールドに送信する方法です.
add_post_meta($post_id, $meta_key, $meta_value, $unique);
関数で可能であることを私は知っています.しかし、それを標準の
wp_insert_post
関数に含めるにはどうすればよいですか?