wake-up-neo.net

Titel und Beitrags-URL basierend auf benutzerdefinierten Feldern?

Ich habe benutzerdefinierte Felder in meinem benutzerdefinierten Beitragstyp. Sie sollten als Titel und Post-Slug für die URL dienen. Grundsätzlich sollte das Titelfeld bei jeder Änderung des Inhalts der benutzerdefinierten Felder entsprechend reagieren. Z.B. Wenn das Feld NAME "John" und der NACHNAME "Smith" enthält, sollte der Titel in "John Smith" geändert werden.

Die Benutzer der Site werden unerfahren sein, so dass sie die Notwendigkeit, NAME und SURNAME und einen separaten Titel dafür anzugeben, nicht verstehen - deshalb brauche ich sie.

Ich weiß, dass ich in meiner Vorlage benutzerdefinierten Feldinhalt anstelle eines Titels anzeigen kann, aber das ist nicht dasselbe. Ich muss auch den Permalink entsprechend ändern.

Also, um meine Eingabe noch einmal zusammenzufassen: benutzerdefiniertes Feld NAME = John benutzerdefiniertes Feld SURNAME = Smith Was sollte passieren: Posttitel = John Smith Permalink = John-Smith

Ich hoffe es ist jetzt klar. Danke in der Tat für irgendwelche Vorschläge.

2
polish bastard

Ich denke, ein guter Weg, um das zu tun, was Sie wollen, ist, den wp_insert_post_data Filter anzuhängen. Hier können Sie den Titel und den Slug des Beitrags ändern, bevor er in der Datenbank gespeichert wird:

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

Es gibt eine Alternative, setzen Sie den Titel überhaupt nicht. Filtern Sie es stattdessen.

Hier ist der the_title-Filter, wie der Codex zeigt:

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

Wenn wir stattdessen so etwas gemacht haben:

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);

Dann ist das Titelfeld jetzt irrelevant und zeigt den Vor- und Nachnamen als Titel am Frontend für Ihren Beitragstyp an. Passen Sie die Namen der relevanten Felder und Beitragstypen an

0
Tom J Nowell