La función de creación para reemplazar el título de la publicación no funciona

5 minutos de lectura

avatar de usuario
gustavo cohen

Estoy tratando de crear una función dentro functions.php para reemplazar el título de la publicación personalizada con información de varios campos personalizados. Antes de publicar el post, quiero evaluar si ya está creado o si es un post nuevo; si es una publicación nueva, quiero obtener información de varios campos, contar el número total de publicaciones en este tipo de publicación personalizada y crear el título; si esto es solo editar una publicación ya existente, quiero usar el contenido dentro de la $_POST['post_title'] campo.

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

Funciona para publicaciones ya creadas, pero no ejecuta la parte de la función que crea el título personalizado de la publicación. ¿Alguna sugerencia? ¡Gracias por adelantado!

Reemplacé mi función con la que sugirió KSNO:

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

?>

Cuando evalúa si la publicación no es “NUEVA” funciona correctamente. Pero no está obteniendo los valores de los campos personalizados para crear un nuevo título para las nuevas publicaciones. el campo de título está vacío. Incluso intenté agregar el valor de un campo personalizado a la variable ‘$ new_title’ y nada

  • comprobar respuesta editada

    – ksno

    14 de julio de 2016 a las 7:18

avatar de usuario
ksno

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

Nunca puede pasar. Si se devuelve falso, significa que la publicación no existe. Realmente no puedes actualizar una publicación que no existe. Verifique el código fuente de la función.

Creo que hay pocas maneras de hacer su tarea, pero solo sugeriré una de ellas.

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

EDITAR

Muy bien, no fue tan fácil como pensaba. Aquí se prueba, protegido de bucles infinitos (Tenga cuidado con los bucles Ejemplo 1 y Ejemplo 2) fragmento de código, que se adapte a sus necesidades:

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

  • Gracias ksno! lo que menciono para escribir es que si se devuelve FALSO (lo que significa que la publicación no existe) para reemplazar el título de la publicación con el contenido de los campos personalizados. si devuelve VERDADERO, simplemente actualice con el contenido de $_POST[‘post_title’] campo

    –Gustavo Cohen

    12 de julio de 2016 a las 12:21

  • Estoy usando su función pero no está generando el nuevo título:

    –Gustavo Cohen

    12 de julio de 2016 a las 12:35

  • Estoy usando su función pero no está generando el nuevo título. Cuando creo una nueva publicación, después de publicar la publicación, el campo de título está vacío

    –Gustavo Cohen

    12 de julio de 2016 a las 12:46

  • @GustavoCohen verifique la edición. Creo que tu problema debe ser resuelto.

    – ksno

    13 de julio de 2016 a las 7:26

  • Hola ksno! Voy a probar tu función hoy. ¡Muchas gracias por tomarte el tiempo de escribir el código!

    –Gustavo Cohen

    15/07/2016 a las 21:05

¿Ha sido útil esta solución?