web-dev-qa-db-fra.com

Écrire un titre automatique à save_post (boucle infinie)

Je veux écrire le titre de l'article avec le contenu d'un champ personnalisé $sentence_number, de cette façon:

add_action('save_post', function ($title, $post_id) {
    $post_type = get_post_type($post_id);
    if ($post_type == 'sentence') {
        $sentence_number = get_field('sentencia_no', $post_id);
        wp_update_post($post_id, [
            'post_title'   => $sentence_number
        ]);
    }
}, 10, 2);

Mais je reçois cette erreur:

Erreur non capturée: niveau d'imbrication de fonction maximal de '200' atteint, abandon!

Comment dois-je le faire pour éviter la boucle? Je vous remercie.

1
aitor

Il existe un moyen simple, vous devez utiliser le hook de filtre wp_insert_post_data Donc, le code devrait être comme

add_filter ('wp_insert_post_data', 'set_post_title_with_field_value');

function set_post_title_with_field_value( $data )
{
    if ($data['post_type'] == 'sentence' ){
        $sentence_number = get_field('sentencia_no', $data['ID']);
        $data['post_title'] = $sentence_number;
    }
    return $data;
}

Vous devez ajouter ce code dans le fichier functions.php. Alors essayez le code et laissez-moi savoir le résultat. Merci

1
Souvik Sikdar