web-dev-qa-db-fra.com

Définir le titre du message à partir de deux champs méta

Dans un type de message personnalisé, les titres de messages sont désactivés, mais dans la liste des messages et dans le slug, le titre est simplement "brouillon" Je veux prendre automatiquement deux morceaux de post-meta et faire ensuite le titre et la limace.

Je pensais que cela fonctionnerait, mais je ne peux pas y arriver:

function set_event_title( $data , $postarr ) {
  if($data['post_type'] == 'events') {
    $event_date = get_post_meta($post_id,'event_datetime',true);
    $event_venue = get_post_meta($post_id, 'venue_name' , true);
    $event_title = $event_venue . ' - ' . $event_date;
    $post_slug = sanitize_title_with_dashes ($event_title,'','save');
    $post_slugsan = sanitize_title($post_slug);

    $data['post_title'] = $post_title;
    $data['post_name'] = $post_slugsan;
  }
  return $data;
}

add_filter( 'wp_insert_post_data' , 'set_event_title' , '99', 2 );

Quelqu'un sait comment je pourrais le faire fonctionner correctement?

3
Eckstein

Vous utilisez une mauvaise variable sur la ligne suivante:

$data['post_title'] = $post_title;

vous devriez utiliser $ event_title dans $ post_title comme suit:

$data['post_title'] = $event_title;

Récupère également l'identifiant de post du paramètre $ postarr.

Code mis à jour:

function set_event_title( $data , $postarr ) {
  if($data['post_type'] == 'events') {
    $event_date = get_post_meta($postarr['ID'],'event_datetime',true);
    $event_venue = get_post_meta($postarr['ID'], 'venue_name' , true);
    $event_title = $event_venue . ' - ' . $event_date;
    $post_slug = sanitize_title_with_dashes ($event_title,'','save');
    $post_slugsan = sanitize_title($post_slug);

    $data['post_title'] = $event_title;
    $data['post_name'] = $post_slugsan;
  }
  return $data;
}
add_filter( 'wp_insert_post_data' , 'set_event_title' , '10', 2 );

Pour plus d'informations sur ce filtre, visitez cette page .

3
Vinod Dalvi

J'ai constaté que la réponse précédente, comme indiqué dans les commentaires, ne fonctionne que lors de la sauvegarde d'un message existant et non de nouveaux messages. Ce qui suit fonctionnera pour les nouveaux postes et les postes existants.

// func that is going to set our title of our customer magically
function w2w_customers_set_title( $data , $postarr ) {

    // We only care if it's our customer
    if( $data[ 'post_type' ] === 'w2w-customers' ) {

        // get the customer name from _POST or from post_meta
        $customer_name = ( ! empty( $_POST[ 'customer_name' ] ) ) ? $_POST[ 'customer_name' ] : get_post_meta( $postarr[ 'ID' ], 'customer_name', true );

        // if the name is not empty, we want to set the title
        if( $customer_name !== '' ) {

            // sanitize name for title
            $data[ 'post_title' ] = $customer_name;
            // sanitize the name for the slug
            $data[ 'post_name' ]  = sanitize_title( sanitize_title_with_dashes( $customer_name, '', 'save' ) );
        }
    }
    return $data;
}
add_filter( 'wp_insert_post_data' , 'w2w_customers_set_title' , '99', 2 );

Il vérifie d'abord le titre dans la variable $_POST, d'où il provient la plupart du temps. Si ce n'est pas le cas, il le tirera du post_meta, qui se chargera de tâches telles que les modifications rapides.

1
Jesse Pearson