Générer automatiquement un titre personnalisé en fonction de la méta

4

Je travaille avec des types de publication personnalisés pour créer un type "de révision de produit" personnalisé. Je personnalise l'interface utilisateur pour avoir des champs pour le "relecteur", le "produit" et leur "relecture". Cela ne nécessite pas vraiment de titre de publication, donc j'ai supprimé ce champ.

Tout fonctionne bien, mais lorsque je regarde toutes les revues de produits, les titres sont totalement inutiles (Brouillon automatique, Brouillon automatique 2, etc.). Ce que je veux faire, c'est que le titre de l'article soit automatiquement associé au nom du réviseur et au produit qu'il a examiné; quelque chose du genre "John Smith, Car Radio".

J'ai une fonction qui s'accroche à l'action save_post et met à jour les champs de méta personnalisés que j'ai définis. Je suppose que je dois ajouter quelque chose ici pour accomplir ce que j'essaie de faire, mais je ne suis pas sûr de la fonction ou du processus requis.

Merci d'avance!

    
posée Jeremy 23.08.2011 - 00:15

1 réponse

5

Jeremy,

Excellent travail, pas seulement en le laissant à "Auto Draft". C'est délicat quand ces types de CPT n'ont pas de titre. Voici du code que j'ai utilisé pour accomplir une tâche similaire.

Vous devrez ajuster cela en fonction de votre situation, mais cela vous indique comment y parvenir. En particulier, vous pouvez utiliser le filtre wp_insert_post_data pour modifier le titre avant de l'ajouter à la base de données. Maintenant, l'une des plus grandes erreurs que vous puissiez commettre ici est de filtrer TOUS les titres d'articles. Si vous ne prenez pas soin de tester le bon contexte (par exemple, lorsque vous enregistrez et / ou modifiez votre CPT "produit", vous constaterez que TOUS les titres de votre site sont mutilés. Ma recommandation est d'utiliser des champs nonce. dans vos méta-boîtes pour détecter le moment où le bon formulaire est envoyé.

Voici mon code:

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

function change_title($data, $postarr)
{    
    // If it is our form has not been submitted, so we dont want to do anything
    if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;

    // Verify this came from the our screen and with proper authorization because save_post can be triggered at other times
    if(!isset($_POST['my_nonce_field'])) return;

    // If nonce is set, verify it
    if(isset($_POST['my_nonce_field']) && !wp_verify_nonce($_POST['my_nonce_field'], plugins_url(__FILE__))) return;

    // Get the associated term name
    foreach($_POST['tax_input']['complaint-type'] as $term) {$term_id = $term;}

    // Get name of term
    $term = get_term_by('id', $term_id, 'complaint-type');

    // Combine address with term
    $title = $_POST['address']['address1'].' ('.$term->name.')';
    $data['post_title'] = $title;

    return $data;
}

Ne vous laissez pas prendre à mes manipulations du titre. Sachez que vous devez définir $data['post_title'] et renvoyer $data .

    
réponse donnée tollmanz 23.08.2011 - 00:31

Lire d'autres questions sur les étiquettes