web-dev-qa-db-fra.com

Définir le titre du type de message personnalisé à la date du message

J'ai un type de message personnalisé, appelé "statut" et j'ai désactivé "titre" dans le type de message. Pour le moment, tous les articles sont configurés avec le titre "Brouillon automatique". Je souhaite définir un moyen de définir le titre comme étant la date du message. Je pense que je devrais utiliser 'wp_insert_post_data ". Pour le moment, j'utilise le code suivant mais il ne fonctionne pas:

function status_title_filter( $data , $postarr )
{

if ($postarr['post_type'] == 'status'){
    $date = $data['post_date'];
    $data['post_title'] = $date;
}
return $data;
}

add_filter( 'wp_insert_post_data' , 'status_title_filter' , '99' );

Merci d'avance de résoudre mon problème simple. Je suis une sorte de novice dans ce genre de choses.

3
Zack Austin

Malgré ce que dit le Codex, $ postarr n'est pas toujours transmis, vous devriez donc simplement utiliser $ data. $ data n'est pas un nom de variable significatif, cependant, je préfère donc $ cleanPost. Je voudrais également essayer de supprimer la priorité sur le filtre, car ce n'est généralement pas nécessaire. C'est également une bonne idée de définir le slug (post_name) en plus du titre et d'éviter d'exécuter le code sur des opérations de brouillon automatique et de corbeille/untrash. Voir si cela fonctionne à la place:

function status_title_filter( $cleanPost )
{
    if( $cleanPost['post_type'] == 'status' && $cleanPost['post_status'] != 'auto-draft' && $_GET['action'] != 'trash' && $_GET['action'] != 'untrash' )
        $cleanPost['post_title'] = $cleanPost['post_name'] = $cleanPost['post_date'];

    return $cleanPost;
}

add_filter( 'wp_insert_post_data', 'status_title_filter' );

Update : Je pense que la raison pour laquelle vous ne voyez pas $ postarr est que, par défaut, les callbacks n'acceptent qu'un paramètre. Si vous voulez plus, vous devez spécifier cela dans le hook, comme add_action( 'wp_insert_post_data', 'my_callback_function', 10, 2). Cela donnerait la priorité à 10 et le nombre d'arguments à 2.

4
Ian Dunn

Il y a un plugin qui fait ça - datetitle . Vous pourriez peut-être consulter le code et avoir une idée de la façon de le faire.

0
Lea Cohen

Je sais que c'est un retard, mais vous pouvez définir le titre sur la date ultérieure juste avant de créer le post.

$postarr['title'] = current_time('mysql');
$postarr['post_type'] = 'myposttype';
wp_insert_post($postarr);

HTH

0
rexposadas