Utilizzare save_post per sostituire il titolo del post

21 nov 2012, 20:46:36
Visualizzazioni: 27.6K
Voti: 26

Sto utilizzando dei custom post e, in questi, non ho bisogno del titolo.

Questo fa sì che WordPress imposti i titoli dei miei post come "Auto Draft".

Vorrei cambiare il valore del titolo con qualcos'altro, calcolato da altri campi nel mio post.

Come posso fare questo utilizzando save_post o altri metodi?

5
Commenti

Per favore modifica la tua domanda per includere la tua chiamata register_post_type().

Chip Bennett Chip Bennett
21 nov 2012 20:54:17

Cosa stai cercando di ottenere esattamente? Non vuoi affatto un titolo per il tuo CPT o vuoi che sia impostato dal valore di un campo personalizzato?

Rutwick Gangurde Rutwick Gangurde
21 nov 2012 21:01:04

Non lo voglio affatto, ma nell'elenco dei post non posso rimuoverlo altrimenti non potrò più modificare i post. Questo significa che ho bisogno di un modo per inserire un titolo "fittizio" di qualche tipo al suo posto.

Tsahi Levent-Levi Tsahi Levent-Levi
21 nov 2012 21:28:54

Quindi, quello che davvero vuoi fare è modificare la schermata di gestione degli articoli, per mostrare colonne diverse per il tuo tipo di post personalizzato? Se è così, potrebbe essere una domanda più utile da porre. :)

Chip Bennett Chip Bennett
21 nov 2012 21:38:42

È solo una parte. Si fanno questo tipo di domande sull'"impatto" perché si cerca una risposta che aiuti a organizzare molti aspetti di un progetto. Ricerca, templating ecc.

e4rthdog e4rthdog
14 feb 2016 12:36:52
Tutte le risposte alla domanda 4
0
24

Il metodo più semplice sarebbe modificare i dati nel momento in cui vengono inseriti, anziché aggiornarli successivamente, utilizzando wp_insert_post_data invece di save_post. Questo funziona sia per la creazione di un nuovo post che per l'aggiornamento di un post esistente senza modifiche. Inoltre, evita il rischio di creare un ciclo infinito attivando update_post all'interno di save_post.

add_filter( 'wp_insert_post_data' , 'modify_post_title' , '99', 1 ); // Acquisisce i dati del post inseriti per poterli modificare.

function modify_post_title( $data )
{
  if($data['post_type'] == 'rating' && isset($_POST['rating_date'])) { // Se il nome effettivo del campo della data di valutazione è diverso, dovrai aggiornare questo parametro.
    $date = date('l, d.m.Y', strtotime($_POST['rating_date']));
    $title = 'Valutazioni TV per ' . $date;
    $data['post_title'] =  $title ; // Aggiorna il titolo del post con il nuovo titolo.
  }
  return $data; // Restituisce i dati modificati.
}
11 ago 2015 11:09:48
0
12

Avevo esattamente la stessa necessità, quindi ho scritto questa funzione - che funziona. Modificala in base alle tue esigenze. Spero sia utile.

// imposta il titolo giornaliero delle valutazioni
function set_rating_title ($post_id) {
    if ( $post_id == null || empty($_POST) )
        return;

    if ( !isset( $_POST['post_type'] ) || $_POST['post_type']!='rating' )  
        return; 

    if ( wp_is_post_revision( $post_id ) )
        $post_id = wp_is_post_revision( $post_id );

    global $post;  
    if ( empty( $post ) )
        $post = get_post($post_id);

    if ($_POST['rating_date']!='') {
        global $wpdb;
        $date = date('l, d.m.Y', strtotime($_POST['rating_date']));
        $title = 'Valutazioni TV per il ' . $date;
        $where = array( 'ID' => $post_id );
        $wpdb->update( $wpdb->posts, array( 'post_title' => $title ), $where );
    }
}
add_action('save_post', 'set_rating_title', 12 );
21 nov 2012 23:18:53
1

Ecco una soluzione che utilizza una variabile statica per prevenire un loop infinito. Questo ti permette di chiamare in modo sicuro wp_update_post() all'interno di una funzione agganciata a save_post.

function km_set_title_on_save( $post_id ) {

    // Imposta questa variabile su false inizialmente.
    static $updated = false;

    // Se il titolo è già stato impostato una volta, esci.
    if ( $updated ) {
        return;
    }

    // Poiché stiamo aggiornando il titolo di questo post, imposta
    // questa variabile su true per assicurarti che non accada di nuovo.
    $updated = true;

    $date           = get_post_meta( $post_id, 'rating_date', true );
    $date_formatted = date( 'l, d.m.Y', strtotime( $date ) );

    // Aggiorna il titolo del post.
    wp_update_post( [
        'ID'         => $post_id,
        'post_title' => 'TV ratings for ' . $date_formatted,
    ] );
}
add_action( 'save_post', 'km_set_title_on_save' );

Nota: Per limitare questa funzionalità a un determinato post type, utilizza l'hook save_post_{$post->post_type} invece di save_post.

1 set 2018 07:29:35
Commenti

Forse devi aggiungere if ($_POST['post_type']!='rating')

samjco-com samjco-com
22 dic 2021 01:17:30
2

Prova il filtro default_title:

add_filter( 'default_title', 'my_default_title', 10, 2 );

function my_default_title( $post_title, $post ){

  $custom_post_type = 'my_awesome_cpt';

  // esegui solo sul tuo custom post type
  if( $post->post_type !== $custom_post_type )
    return $post_title;

  // crea qui il tuo titolo preferito
  $post_title = $custom_post_type . date( 'Y-m-d :: H:i:s', time() );

  return $post_title;
}
21 nov 2012 23:16:03
Commenti

Questa soluzione non permette di creare un titolo "calcolato da altri campi nel mio post" - come richiesto. Va bene se puoi generare un titolo automatico per tutti i post di quel tipo. Ma se hai bisogno di dipendere da qualche variabile dinamica allora questo non aiuterà.

Biranit Goren Biranit Goren
21 nov 2012 23:45:16

@Biranit Goren Cosa significa "calcolato da altri campi nel mio post"? Quale campo ti è mancato nell'oggetto post memorizzato in $post? Per favore leggi la domanda iniziale e i commenti qui sotto. Un titolo di post generato automaticamente non è stato richiesto. È necessario solo un titolo fittizio (una sostituzione per "Auto Draft" di WordPress).

Ralf912 Ralf912
22 nov 2012 22:10:04