Erstellen einer Funktion zum Ersetzen des Beitragstitels funktioniert nicht

Lesezeit: 5 Minuten

Benutzeravatar von Gustavo Cohen
Gustav Cohen

Ich versuche, eine Funktion im Inneren zu erstellen functions.php um den benutzerdefinierten Beitragstitel durch Informationen aus mehreren benutzerdefinierten Feldern zu ersetzen. Bevor ich den Beitrag veröffentliche, möchte ich prüfen, ob er bereits erstellt wurde oder ob es sich um einen neuen Beitrag handelt. Wenn es sich um einen neuen Beitrag handelt, möchte ich Informationen aus mehreren Feldern abrufen, die Gesamtzahl der Beiträge in diesem benutzerdefinierten Beitragstyp zählen und den Titel erstellen. Wenn dies nur die Bearbeitung eines bereits vorhandenen Beitrags ist, möchte ich den darin enthaltenen Inhalt verwenden $_POST['post_title'] aufstellen.

function custom_field_value_as_title( $value, $post_id, $field ) {
    global $_POST;

    // vars
    $title = $_POST['post_title'];
    $post = get_page_by_title( $title, 'OBJECT', 'mascotas' );

    if ( FALSE === get_post_status( $post_id ) ) {

        $new_title_ciudad = get_field('ciudad', $post_id);
        $new_title_sexo = get_field('sexo', $post_id);
        $new_title_especie = get_field('especie' , $post_id);
        $registered_year = date("y");

        $count_mascotas = wp_count_posts('mascotas');
        $next_count = $count_mascotas->publish + 1;
        $new_count = sprintf("%04d", $next_count);

        $new_title = "$new_title_ciudad"."$new_title_sexo"."$new_title_especie"."$registered_year"."-"."$new_count";

    // update post
        $my_post = array(
            'ID'         => $post_id,
            'post_title' => $new_title,
            'post_name'  => $post_id
            );

    // Update the post into the database
        wp_update_post( $my_post );

    } else {
    // vars             
        $new_title = $_POST['post_title'];

    // update post
        $my_post = array(
            'ID'         => $post_id,
            'post_title' => $new_title,
            'post_name'  => $post_id
            );

    // Update the post into the database
        wp_update_post( $my_post );
    }

}

add_filter('acf/update_value', 'custom_field_value_as_title', 10, 3);

Es funktioniert für bereits erstellte Beiträge, führt jedoch nicht den Teil der Funktion aus, der den benutzerdefinierten Beitragstitel erstellt. Irgendwelche Vorschläge? Danke im Voraus!

Ich habe meine Funktion durch die von KSNO vorgeschlagene ersetzt:

<?php

function title_replace_function( $post_id, $post ) {
   if ( $post->post_date == $post->post_modified ) {

    global $_POST;

    $new_title_ciudad = get_field('ciudad', $post_id);
    $new_title_sexo = get_field('sexo', $post_id);
    $new_title_especie = get_field('especie' , $post_id);
    $registered_year = date("y");

    $count_mascotas = wp_count_posts('mascotas');
    $next_count = $count_mascotas->publish + 1;
    $new_count = sprintf("%04d", $next_count);

    $new_title = "$new_title_ciudad"."$new_title_sexo"."$new_title_especie"."$registered_year"."-"."$new_count";

    // update post
    $my_post = array(
    'ID'         => $post_id,
    'post_title' => $new_title,
    'post_name'  => $post_id
    );

    // Update the post into the database
    wp_update_post( $my_post );

} else {

    // vars             
    $new_title = $_POST['post_title'];

    // update post
    // http://codex.wordpress.org/Function_Reference/wp_update_post
    $my_post = array(
    'ID'         => $post_id,
    'post_title' => $new_title,
    'post_name'  => $post_id
    );

    // Update the post into the database
    wp_update_post( $my_post );
  }
}
add_action( 'publish_post', 'title_replace_function', 10, 2 );

?>

Wenn es auswertet, ob der Beitrag nicht “NEU” ist, funktioniert es korrekt. Aber es werden nicht die Werte der benutzerdefinierten Felder abgerufen, um einen neuen Titel für die neuen Posts zu erstellen. Das Titelfeld ist leer. Ich habe sogar versucht, den Wert eines benutzerdefinierten Felds zur Variablen „$new_title“ hinzuzufügen, und nichts

  • Überprüfen Sie die bearbeitete Antwort

    – ksno

    14. Juli 2016 um 7:18 Uhr

Benutzeravatar von ksno
ksno

if ( get_post_status( $post_id ) === FALSE ) {
    wp_update_post( $my_post );
}

Kann nie passieren. Wenn false zurückgegeben wird, bedeutet dies, dass der Beitrag nicht existiert. Sie können einen Beitrag, der nicht existiert, nicht wirklich aktualisieren. Überprüfen Sie den Quellcode der Funktion.

Ich denke, es gibt einige Möglichkeiten, Ihre Aufgabe zu erledigen, aber ich schlage nur eine davon vor.

function title_replace_function( $post_id, $post ) {
   if ( $post->post_date == $post->post_modified ) {
      // code for new post
   } else {
      // code for edited post
   }
}
add_action( 'publish_post', 'title_replace_function', 10, 2 );

BEARBEITEN

Okay, war nicht so einfach wie ich dachte. Hier wird getestet, gesichert von Endlosschleifen (Achten Sie auf Schleifen Beispiel 1 und Beispiel 2) Stück Code, das Ihren Bedürfnissen entspricht:

function title_replace_function( $post_id, $post ) {
    if ( ! wp_is_post_revision( $post_id ) ) {

        remove_action('save_post', 'title_replace_function');

        if ( $post->post_date == $post->post_modified ) {
            global $_POST;
            $new_title_ciudad = get_field('ciudad', $post_id);
            $new_title_sexo = get_field('sexo', $post_id);
            $new_title_especie = get_field('especie' , $post_id);
            $registered_year = date("y");
            $count_mascotas = wp_count_posts('mascotas');
            $next_count = $count_mascotas->publish + 1;
            $new_count = sprintf("%04d", $next_count);
            $new_title = "$new_title_ciudad"."$new_title_sexo"."$new_title_especie"."$registered_year"."-"."$new_count";
            $my_post = array(
                'ID'         => $post_id,
                'post_title' => $new_title,
                'post_name'  => $post_id
            );
            wp_update_post( $my_post );
        } else {
            $new_title="new_title";
            $my_post = array(
                'ID'         => $post_id,
                'post_title' => $new_title,
                'post_name'  => $post_id
            );
            wp_update_post( $my_post );
        }

        add_action('save_post', 'my_function');
    }
}
add_action( 'save_post', 'title_replace_function', 10, 3 );

  • Danke ksno! Was ich schreiben möchte, ist, dass, wenn FALSE zurückgegeben wird (was bedeutet, dass der Beitrag nicht existiert), der Titel des Beitrags durch den Inhalt aus den benutzerdefinierten Feldern ersetzt wird. Wenn es TRUE zurückgibt, aktualisieren Sie einfach mit dem Inhalt von $_POST[‘post_title’] aufstellen

    – Gustavo Cohen

    12. Juli 2016 um 12:21 Uhr

  • Ich verwende Ihre Funktion, aber sie generiert nicht den neuen Titel:

    – Gustavo Cohen

    12. Juli 2016 um 12:35 Uhr

  • Ich verwende Ihre Funktion, aber sie generiert nicht den neuen Titel. Wenn ich einen neuen Beitrag erstelle, ist das Titelfeld nach der Veröffentlichung des Beitrags leer

    – Gustavo Cohen

    12. Juli 2016 um 12:46 Uhr

  • @GustavoCohen überprüfen Sie die Bearbeitung. Ich denke dein Problem sollte gelöst sein.

    – ksno

    13. Juli 2016 um 7:26 Uhr

  • Hallo kno! Ich werde Ihre Funktion heute ausprobieren. Vielen Dank, dass Sie sich die Zeit genommen haben, den Code zu schreiben!

    – Gustavo Cohen

    15. Juli 2016 um 21:05 Uhr

1390090cookie-checkErstellen einer Funktion zum Ersetzen des Beitragstitels funktioniert nicht

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy