J'ai lu d'autres réponses à des questions similaires mais aucune d'entre elles n'a résolu mon problème. Ce code fonctionne très bien dans Editor, mais sous Quick Edit ou Bulk Edit, il ne semble pas fonctionner du tout. Qu'est-ce que je fais mal?
// link author display name to Broker Name if Author is Broker
add_action( 'save_post', 'author_is_broker', 200 );
function author_is_broker($post_id) {
// page/post options
global $lwp_options, $Listing;
$post_types = get_post_types();
unset($post_types['listings']);
$post_type = get_post_type();
//Only for listings
if(isset($post_type) && $post_type == "listings"){
// Ignore for autosave
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return $post_id;
} else {
// If this is a revision, get real post ID
if ( $parent_id = wp_is_post_revision( $post_id ) )
$post_id = $parent_id;
// Get display name of post owner
$broker_id = get_post_field( 'post_author', $post_id );
$broker = get_the_author_meta('display_name', $broker_id);
// Verify directory exists for author
$args = array(
'post_type' => 'wpbdp_listing',
'author' => $broker_id
);
$wp_posts = get_posts($args);
if (count($wp_posts)) {
$is_broker = true;
} else {
return $post_id;
}
// If directory listing has been assigned, user is broker
if (isset($is_broker) && $is_broker == true) {
// add the term
$term = sanitize_text_field($broker);
$Listing->add_listing_category_term('broker', $term);
// update the post
update_post_meta( (int) $post_id, 'broker', $term );
}
else {
return $post_id;
}
}
} else {
return $post_id;
}
}
C'est juste une supposition, puisque je n'ai pas testé votre code, mais ... Il y a une partie qui a l'air assez floue pour moi:
Toutes vos actions ne sont exécutées que si cette condition est vraie:
if(isset($post_type) && $post_type == "listings"){
Et d'où vient cette variable $post_type
?
$post_type = get_post_type();
Donc, vous ne transmettez aucun post_id à cet appel de fonction ... Cela signifie que vous travaillez avec l'objet global $ post. Mais rien ne garantit que de tels postes existent.
Il y a une raison pour laquelle save_post
hook passe post_id en tant que paramètre - vous devriez l'utiliser dans votre fonction ...
Donc, changer la ligne ci-dessus pour:
$post_type = get_post_type($post_id);
devrait résoudre votre problème.
PS. Il ne sert à rien de faire ça:
$post_types = get_post_types();
unset($post_types['listings']);
Vous n'utilisez même pas cette variable dans votre code plus tard ...
PPS. save_post
est une action, vous n’avez donc rien à y retourner.