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