web-dev-qa-db-fra.com

Definition d'un titre sur un type de publication personnalisé

J'ai un CPT appelé "profil" qui ne supporte que l'éditeur et la vignette. Chaque utilisateur est limité à la publication d'un seul profil.

Je cherche un moyen de pré-remplir le titre et les champs slug avec le nom d'affichage de l'auteur du message. Dans l'état actuel des choses, si je clique sur Publier, le post_status dans la base de données est "Brouillon automatique" et l'URL devient "localhost/mytestsite/profile/auto-draft-1". Il semble que WP ait besoin d'un titre, sinon il ne sera pas considéré comme "publié".

J'ai vérifié plusieurs questions déjà postées ici et celle-ci semble être celle dont j'ai besoin. Type d'article personnalisé avec titre personnalisé

Mais comme je veux le nom de l'auteur et non des valeurs dans une taxonomie ou un champ personnalisé, je ne sais pas comment modifier le code pour refléter cela.

Je vois que get_the_author () doit être dans la boucle.

1
annabwashere

Vous pouvez ajouter une entrée masquée dans la page pour prédéfinir le champ de titre, car il ne figurera pas sur la page (car le type ne prend pas en charge les titres).

Slug est produit à partir du titre, vous devez donc uniquement ajouter une valeur de titre.

Quelque chose comme ça devrait fonctionner (bien que non testé).

add_action( 'submitpost_box', 'hidden_type_title' );

function hidden_type_title() {
    global $current_user, $post, $post_type;

    // If the current type supports the title, nothing to done, return
    if( post_type_supports( $post_type, 'title' ) )
        return;

    ?>
    <input type="hidden" name="post_title"value="<?php echo esc_attr( htmlspecialchars( get_the_author_meta( 'display_name', $current_user->data->ID ) ) ); ?>" id="title" />
    <?php
}

Bien que je suggère peut-être d’ajouter davantage au code et de vérifier si le nom complet de l’auteur n’est pas vide, etc ... cela devrait suffire pour que vous puissiez travailler avec .. (ou pour commencer au moins) .. :)

1
t31os

J'ai essayé la réponse acceptée mais cela n'a fonctionné que la deuxième fois que j'ai modifié le message et enregistré. Mon code fonctionne la première fois. Aussi, j'utilise un champ personnalisé pour remplacer le titre.

add_action( 'submitpost_box', 'set_post_type_title_manaully' );

function set_post_type_title_manaully() {
global $post, $post_type;

// If the current type supports the title, nothing to done, return
if( post_type_supports( $post_type, 'title' ) )
    return;

$title = esc_attr(htmlspecialchars(get_field('advanced_custom_field')));
// $title = esc_attr(htmlspecialchars(get_post_meta($post->ID,'custom_field',true)));
wp_update_post( array( 'ID'=>$post->ID, 'post_title'=>$title ) );
0
Ivor Scott