私は、投稿が初めて公開されたときに作成したこの機能を使用します。
function a_new_post($post){
$post_id = $post->ID;
if ( !get_post_meta( $post_id, 'firstpublish', $single = true ) ) {
// ...run code once
update_post_meta( $post_id, 'firstpublish', true );
}
}
add_action( 'draft_to_published', 'a_new_post' );
何も問題ないと思いますが、サンプル投稿を作成しようとするとデータベースがチェックされ、 "firstpublished"フィールドが作成されていません。
誰かが何か悪いことを見ますか?
正しい動作は'draft_to_publish'
です。
正しいステータスを使用したことを確認するには、次のコマンドを使用してすべての登録済み投稿ステータス(カスタムステータスを含む)のリストを取得してください。
<pre><?php print '- ' . implode( "\n- ", array_keys( get_post_stati() ) );?></pre>
バニラインストールでは、あなたは得るべきです:
publish_post
はあなたが公開された投稿を編集するたびに呼び出されることに注意してください。
get_post_stati()
もWordPressでのこれらの予測不可能な名前の1つに注意してください。それは明らかに間違っています。名詞statusの複数形は、英語で状態、ラテン語で状態です。 :D
必要に応じて 'transition_post_status'
にフックすることもできます。新しいステータスと古いステータスを引数として取得します。3番目の引数はpostオブジェクトです。それはfuture_to_publish
もキャッチします、そしてまた一度捨てられてそして今再公表された投稿(trash_to_publish
)。
例:
add_action( 'transition_post_status', 'a_new_post', 10, 3 );
function a_new_post( $new_status, $old_status, $post )
{
if ( 'publish' !== $new_status or 'publish' === $old_status )
return;
if ( 'post' !== $post->post_type )
return; // restrict the filter to a specific post type
// do something awesome
}
ポストファーストセーブタイムメタ値はとても簡単に適用できます。
function a_new_post( $post_id, $post, $update ) {
if ( !get_post_meta( $post_id, 'firstpublish', $single = true ) ) {
update_post_meta( $post_id, 'firstpublish', true );
}
}
add_action( 'save_post', 'a_new_post', 10, 3 );