Folosirea save_post pentru a înlocui titlul articolului

21 nov. 2012, 20:46:36
Vizualizări: 27.6K
Voturi: 26

Folosesc articole personalizate (custom posts) și în acestea nu am nevoie de titlu.

Din această cauză WordPress setează titlurile articolelor mele ca "Auto Draft".

Aș dori să schimb valoarea titlului cu altceva, calculat din alte câmpuri ale articolului meu.

Cum pot face acest lucru folosind save_post sau alte metode?

5
Comentarii

Te rugăm să editezi întrebarea ta pentru a include apelul tău register_post_type().

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

Ce anume încerci să realizezi? Nu vrei deloc un titlu pentru CPT-ul tău sau vrei să fie setat din valoarea unui câmp personalizat?

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

Nu-l vreau deloc, dar în lista de articole nu pot să-l elimin pentru că nu voi mai putea edita articolele. Aceasta înseamnă că am nevoie de o metodă pentru a plasa un titlu "fals" de un fel sau altul.

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

Deci, ceea ce chiar vrei să faci este să modifici ecranul de gestionare a articolelor, pentru a afișa coloane diferite pentru tipul tău personalizat de postare? Dacă da, aceasta ar putea fi o întrebare mai benefică de pus. :)

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

Este doar o parte. Cineva pune acest gen de întrebări despre "impact" pentru că caută un răspuns care să-l ajute să organizeze mai multe aspecte ale unui proiect. Căutare, șabloane etc.

e4rthdog e4rthdog
14 feb. 2016 12:36:52
Toate răspunsurile la întrebare 4
0
24

Cea mai simplă metodă ar fi să editați datele în momentul în care sunt introduse, mai degrabă decât să le actualizați ulterior, folosind wp_insert_post_data în loc de save_post. Această abordare funcționează atât la crearea unui articol nou, cât și la actualizarea unui articol existent fără modificări. De asemenea, evită pericolul de a crea o buclă infinită prin declanșarea funcției update_post în interiorul funcției save_post.

add_filter( 'wp_insert_post_data' , 'modify_post_title' , '99', 1 ); // Preia datele postului inserate pentru a le putea modifica.

function modify_post_title( $data )
{
  if($data['post_type'] == 'rating' && isset($_POST['rating_date'])) { // Dacă numele real al câmpului pentru data evaluării este diferit, va trebui să actualizați această condiție.
    $date = date('l, d.m.Y', strtotime($_POST['rating_date']));
    $title = 'Evaluări TV pentru ' . $date;
    $data['post_title'] =  $title ; // Actualizează titlul postului cu noul titlu.
  }
  return $data; // Returnează datele modificate.
}
11 aug. 2015 11:09:48
0
12

Am avut exact aceeași nevoie, așa că am scris această funcție - care funcționează. Modifică-o în funcție de nevoile tale. Sper că te ajută.

// setează titlul zilnic pentru rating
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 = 'Audiențe TV pentru ' . $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

Iată o soluție care utilizează o variabilă statică pentru a preveni o buclă infinită. Acest lucru vă permite să apelați în siguranță wp_update_post() în interiorul unei funcții atașate la hook-ul save_post.

function km_set_title_on_save( $post_id ) {

    // Inițializăm această variabilă cu false.
    static $updated = false;

    // Dacă titlul a fost deja setat o dată, ieșim din funcție.
    if ( $updated ) {
        return;
    }

    // Deoarece actualizăm titlul acestui articol, setăm
    // variabila la true pentru a ne asigura că nu se mai întâmplă din nou.
    $updated = true;

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

    // Actualizăm titlul articolului.
    wp_update_post( [
        'ID'         => $post_id,
        'post_title' => 'Rating-uri TV pentru ' . $date_formatted,
    ] );
}
add_action( 'save_post', 'km_set_title_on_save' );

Notă: Pentru a limita această funcționalitate la un anumit tip de articol, utilizați hook-ul save_post_{$post->post_type} în loc de save_post.

1 sept. 2018 07:29:35
Comentarii

Poate ai nevoie să adaugi if ($_POST['post_type']!='rating')

samjco-com samjco-com
22 dec. 2021 01:17:30
2

Încearcă filtrul default_title:

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

function my_default_title( $post_title, $post ){

  $custom_post_type = 'my_awesome_cpt';

  // execută doar pentru tipul tău de postare personalizat(ă)
  if( $post->post_type !== $custom_post_type )
    return $post_title;

  // creează titlul preferat aici
  $post_title = $custom_post_type . date( 'Y-m-d :: H:i:s', time() );

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

Această soluție nu permite crearea unui titlu "calculat din alte câmpuri din postarea mea" - așa cum a fost solicitat. Este în regulă, dacă poți genera un titlu automat pentru toate postările de acel tip. Dar dacă trebuie să depinzi de o variabilă dinamică, atunci aceasta nu va ajuta.

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

@Biranit Goren Ce înseamnă "calculat din alte câmpuri din postarea mea"? Ce câmp ți-a lipsit în obiectul postării stocat în $post? Te rog să citești întrebarea inițială și comentariile de mai jos. Nu este solicitat un titlu de postare generat automat. Este necesar doar un titlu fals de postare (un înlocuitor pentru "Schiță automată" din WordPress).

Ralf912 Ralf912
22 nov. 2012 22:10:04