特定のカスタム投稿タイプが公開されたらすぐに追加機能を起動しようとしています
function insert_table_products($post_id, $post) {
if ($post->post_type == 'custom-products') {
global $wpdb;
$custom_meta = get_post_meta($post_id);
//print_r($custom_meta);
//print_r($post);
$attachments = new Attachments('my_attachments');
if ($attachments->exist()) :
$my_index = 0;
$use_image = new SplFileInfo($attachments->url($my_index));
$use_main_image = $use_image->getFilename();
endif;
$wpdb->insert(
'products', array(
'product_code' => $custom_meta['product_code'][0],
'product_name' => $post->post_title,
'product_img_name' => $use_main_image,
'price' => $custom_meta['product_price'][0], //$POST['acf-field-price_patch'],
'product_inventory' => $custom_meta['product_stock'][0], //$POST['fields[field_54df75e760b5e]'],
)
);
}
}
add_filter('publish_post', 'insert_table_products', 10, 2);
//add_action( 'publish_post', 'insert_table_products', 10, 2);
どちらのフックも機能しません。私はprint_r
がいくつかのデータを表示することを期待していました
ところで、私はまたによって引き起こされる更新機能を、持っています
//add_filter('edit_post', 'update_table_products', 10, 2);
これもまた正しく動作しないようです。
何か案は?
publish_post
はカスタム投稿タイプでは動作しません。正しいフック(アクションフック)はpublish_{$custom_post_type}
です。これはアクションフックなのでadd_action()
を使うべきです。
私はまたtransition_post_status
フックを利用する傾向があります。これは投稿のステータスが変更される度に変更されるたびに起動されるので、もっと普遍的なフックです。 $old_status
と$new_status
を使って、投稿の前のステータスと新しいステータスをチェックしてから何かをすることができます。
新しい投稿の場合は、次のようになります。(PHP 5.3 +が必要です)
add_action( 'transition_post_status', function ( $new_status, $old_status, $post )
{
if( 'publish' == $new_status && 'publish' != $old_status && $post->post_type == 'my_post_type' ) {
//DO SOMETHING IF NEW POST IN POST TYPE IS PUBLISHED
}
}, 10, 3 );
transition_post_status
を使用して投稿の編集/更新をすることができます。
add_action( 'transition_post_status', function ( $new_status, $old_status, $post )
{
if( 'publish' == $new_status && 'publish' == $old_status && $post->post_type == 'my_post_type' ) {
//DO SOMETHING IF A POST IN POST TYPE IS EDITED
}
}, 10, 3 );
投稿ステータスの移行に関する詳細については、 コーデックス をチェックしてください。
高度なカスタムフィールドプラグインで構築されたカスタムフィールド、および移行後に実行される save_post
フックを使用するため、カスタムフィールドを追加しようとしてもここでは機能しません。
カスタム投稿タイプのために、物事を簡単にするために save_{$post_type}
と呼ばれる新しいフックが導入されました。このフックは、カスタムフィールドを更新するためにACFフォーラムによっても推奨されています。