J'essaie de déclencher une fonction supplémentaire dès qu'un certain type de message personnalisé est publié.
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);
Aucun des crochets ne fonctionne. Je m'attendais à ce que le print_r
affiche des données
BTW, j'ai aussi une fonction de mise à jour, déclenchée par
//add_filter('edit_post', 'update_table_products', 10, 2);
qui ne semble pas non plus fonctionner correctement.
Des idées?
publish_post
ne fonctionne pas pour les types de publication personnalisés, le hook correct (action hook) est publish_{$custom_post_type}
. Vous devez utiliser add_action()
car il s'agit d'un crochet d'action.
J'ai aussi tendance à utiliser le hook transition_post_status
, qui est beaucoup plus universel puisqu'il se déclenche chaque fois que le statut d'une publication est modifié. Vous pouvez utiliser $old_status
et $new_status
pour vérifier le statut précédent et nouveau d'un message, puis effectuez une action.
Pour un nouveau message, vous pouvez quelque chose comme ceci: ( Nécessite 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 );
Pour les modifications postérieures/mises à jour, en utilisant transition_post_status
, vous pouvez faire
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 );
Pour en savoir plus sur la transition post-statut, vous pouvez consulter le codex
Les champs personnalisés, intégrés dans le plug-in de champs personnalisés avancés, utilisent le save_post
hook, qui s'exécute après la post-transition. Il est donc inutile d'essayer d'ajouter des champs personnalisés.
Pour les types de publication personnalisés, un nouveau hook appelé save_{$post_type}
a été introduit pour faciliter les choses. Ce hook est également recommandé par le forum ACF pour mettre à jour les champs personnalisés.