Acción de tipo de publicación personalizada save_post que no se dispara

3

Lo siento si esto ya está respondido aquí. Miré a mi alrededor y no pude ver ninguna respuesta a mi pregunta, así que pensé en publicar la mía.

Estoy creando un complemento para un cliente que recopila los comentarios de los clientes sobre un proyecto reciente que se ha completado.

El administrador usaría el sistema para enviar un "aviso" al cliente pidiéndole sus comentarios con un enlace a un formulario en el sitio.

He creado un tipo de publicación personalizada llamada "customer_prompts" que solo tiene un campo de título y algunos campos personalizados que se almacenan en una tabla de base de datos personalizada, no en la meta meta.

Abajo está mi código para la acción save_post. Parece que cuando presiono publicar, no activa la acción save_post y solo guarda el valor del título en wp_posts.

add_action('save_post', 'save_prompt');
function save_prompt($post_id){
$post = get_post($post_id);

    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
          return;

    if ( 'customer_prompt' == $_POST['post_type'] ) 
    {
        if ( !current_user_can( 'edit_page', $post_id ) )
            return;
    }
    else
    {
        if ( !current_user_can( 'edit_post', $post_id ) )
        return;
    }

    global $wpdb;

    $prompt_id = com_create_guid();
    $customer_feedback_name = $_POST['_sdg_customer_feedback_name'];
    $customer_feedback_email = $_POST['_sdg_customer_feedback_email'];
    $salesperson = $_POST['_sdg_salesperson'];

    $values = array(
        'id' => $prompt_id, 
        'sdg_customer_name' => $customer_feedback_name,
        'sdg_customer_email' => $customer_feedback_email,
        'sdg_salesperson' => $salesperson,
        'sdg_post_id' => $post->id
    );

    $insert = $wpdb->insert($table_name, $values);

    if($insert) {
        mail($customer_feedback_email, 'hello', 'hello');
    }

}

Cualquier ayuda sería muy apreciada ya que no puedo averiguar qué está pasando aquí.

Gracias, Jamie.

    
pregunta JamieCassidy 10.12.2012 - 17:33

6 respuestas

12
  

La acción "save_post" solo se llama cuando realmente cambiamos   algo en el formulario de post page. Si simplemente presionamos el botón de actualización,   sin cambiar nada, la acción "save_post" no se llama.

     

Esto es importante si estamos editando un tipo de publicación personalizada donde teníamos   meta cajas personalizadas. Si nos basamos en la acción "save_post" y solo   cambiar cosas en nuestras meta cajas personalizadas, nada sucederá.

     

La solución es usar el gancho de acción "pre_post_update", en lugar de   "save_post"

enlace

    
respondido por el revo 16.03.2013 - 23:03
1

edit ¿Has intentado colocar print_r('hello world'); die(); después de function save_prompt($post_id){ para asegurarte de que la función realmente sea recogida por el gancho de acción? /edit

Varios problemas podrían estar en juego:

1: Su global wpdb debe estar en la parte superior de su función, antes de todas sus declaraciones condicionales.

2: Sus variables $_POST deben tener condicionales de if(isset($_POST['food')) para verificar si los datos que se están publicando realmente se están configurando antes de llegar a su función; de lo contrario, puede estar causando un error fatal, lo que hace que no se ingresen los datos. la base de datos.

3: intente global $post en la parte superior de la función, luego puede llamar a las variables de la publicación como $post->post_type como un objeto a través de la variable $post .

4: Agregue $wpdb->print_errors; die(); después de $insert = $wpdb->insert($table_name, $values); en caso de que su consulta de base de datos sea incorrecta.

Esperemos que uno de esos solucione tu problema.

    
respondido por el Caleuanhopkins 11.12.2012 - 10:38
0

En primer lugar, sugeriría que configurar tu sitio de WordPress sea fácil de depurar enlace

De esa manera, es fácil ver cosas;)

Para el gancho de acción, creo que necesitas conectarlo así:

add_action('save_post', 'save_prompt', 10, 2);
function save_prompt( $post_id, $post ){
//do whatever
}

el gancho save_post pasa 2 argumentos.

    
respondido por el WP Themes 10.01.2013 - 16:53
0

Esto me pasó a mí. Resultó que tenía un conjunto de plantillas de página (un valor post-meta para _wp_page_template ) en una plantilla que ya no existía, después de haber cambiado de tema. Este bit de código en wp-includes/post.php :

if ( ! empty( $postarr['page_template'] ) ) {
    $post->page_template = $postarr['page_template'];
    $page_templates = wp_get_theme()->get_page_templates( $post );
    if ( 'default' != $postarr['page_template'] && ! isset( $page_templates[ $postarr['page_template'] ] ) ) {
        if ( $wp_error ) {
            return new WP_Error( 'invalid_page_template', __( 'Invalid page template.' ) );
        }
        ...

aborta antes de disparar save_post .

    
respondido por el Vic 22.12.2017 - 21:42
0

Creo que el var_dump en add_action ('save_post', la función de devolución de llamada no se muestra!

añadir

$fp = fopen('c:\data.txt', 'w');
fwrite($fp, print_r($post_id, true));
fclose($fp);

y comprueba si 'data.txt' existe, sí, es verdad por save_post.

:)

    
respondido por el Futz 14.10.2018 - 21:00
0

También tuve este problema exacto y pensé que agregaría a las posibles respuestas, para ayudar a salvar a alguien algún tiempo. Fue un problema muy simple que me tomó días identificarlo (estoy un poco más callado en este momento, y me siento un poco tonto) ...

Resulta que un formulario metabox que se estaba generando contenía un campo de "acción" que sobrescribía el campo "acción" del formulario generado por WordPress. El formulario solo se usaba en una publicación personalizada y, por lo tanto, la acción incorrecta. se estaba pasando a WordPress en POST a ' wp-admin / post.php 'y terminó siendo manejado por el controlador predeterminado (al final de la instrucción switch).

Otro efecto secundario fue que, al actualizar o publicar, WordPress se redirigió al índice de publicación incorporado, en lugar de volver directamente a la publicación editada.

La solución fue eliminar el elemento de formulario oculto 'acción' para el metabox.

Espero que esto ayude a alguien por ahí ...

    
respondido por el user3381109 13.11.2018 - 09:51

Lea otras preguntas en las etiquetas