web-dev-qa-db-fra.com

Titre et URL de publication basés sur des champs personnalisés?

J'ai des champs personnalisés dans mon type de message personnalisé. Ils devraient servir de titre et de slug post pour URL. Fondamentalement, chaque fois que je modifie le contenu des champs personnalisés, le champ de titre doit réagir en conséquence. Par exemple. Si le champ NAME contient "John" et le nom de famille "Smith", le titre doit être remplacé par "John Smith".

Les utilisateurs du site seront peu expérimentés et ne comprendront donc pas la nécessité de mettre NAME et NOM et un titre distinct pour cela - c'est pourquoi j'en ai besoin.

Je sais que je peux afficher un contenu de champ personnalisé au lieu d'un titre dans mon modèle, mais ce n'est pas la même chose. J'ai également besoin que le permalien soit modifié en conséquence.

Donc, pour récapituler mon entrée: champ personnalisé NAME = champ personnalisé John SURNAME = Smith Ce qui devrait se passer: post titre = John Smith permalink = john-smith (je suppose que le titre extrait des champs personnalisés sera traité normalement)

J'espère que c'est clair maintenant. Merci en effet pour toutes les suggestions.

2
polish bastard

Je pense qu’un bon moyen de faire ce que vous voulez est d’utiliser le filtre wp_insert_post_data . Ici, vous pouvez changer le titre et le slug de la publication avant qu'elle ne soit enregistrée dans la base de données:

add_filter( 'wp_insert_post_data', 'wpse_update_post_title_and_slug' );
function wpse_update_post_title_and_slug( $data ) {

    //You can make some checks here before modify the post data.
    //For example, limit the changes to standard post type
    if( 'post' == $data['post_type'] ) {

        //Add post meta to post title
        $data['post_title'] = $_POST['the-name-field'] . ' ' . $_POST['the-surname-field'];

        //Update the slug of the post for the URL
        $data['post_name'] = sanitize_title( $data['post_title'] );

    }

    return $data;

}
1
cybmeta

Il y a une alternative, ne définissez pas le titre du tout. Au lieu de cela, filtrez-le.

Voici le filtre the_title comme démontré par le codex:

function suppress_if_blurb($title, $id) {
    if (in_category('blurb', $id)) {
        return '';
    }
    return $title;
}
add_filter('the_title', 'suppress_if_blurb', 10, 2);

Si au lieu de cela nous faisions quelque chose comme ça:

function wpse144041_modify_title($title, $id) {
    if ( get_post_type( $id ) == 'yourposttype' ) {
        $first = get_post_meta( $id, 'first', true );
        $last = get_post_meta( $id, 'last', true );
        $title = $first.' '.$last;
    }
    return $title;
}
add_filter('the_title', 'wpse144041_modify_title', 10, 2);

Ensuite, le champ de titre n'est plus pertinent et affichera les noms et prénoms comme titre au recto pour votre type de message. Ajustez le nom du champ et du type de message en fonction

0
Tom J Nowell