Ação do tipo save_post personalizada não disparando

3

Desculpe se isso já foi respondido aqui. Eu olhei em volta e não consegui ver nenhuma resposta para a minha pergunta, então pensei em postar a minha.

Estou criando um plug-in para um cliente que reúne os comentários dos clientes em um projeto recente que foi concluído.

O administrador usaria o sistema para enviar uma "solicitação" ao cliente solicitando o feedback dele com um link para um formulário no site.

Eu criei um tipo de postagem personalizado chamado "customer_prompts", que tem apenas um campo de título e alguns campos personalizados que são armazenados em uma tabela de banco de dados personalizada, não pós meta.

Abaixo está o meu código para a ação save_post. Parece que quando eu bato em publicar, ele não dispara a ação save_post e salva apenas o valor do título em 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');
    }

}

Qualquer ajuda seria muito apreciada, pois não posso descobrir o que está acontecendo aqui.

Obrigado Jamie.

    
por JamieCassidy 10.12.2012 / 17:33

6 respostas

12
  

A ação "save_post" só é chamada quando realmente mudamos   algo no formulário da página de postagem. Se apenas pressionarmos o botão de atualização,   sem alterar nada, a ação "save_post" não é chamada.

     

Isso é importante se estivermos editando um tipo de postagem personalizado onde tivemos   caixas meta personalizadas. Se confiarmos na ação "save_post" e somente   mudar coisas em nossas caixas meta personalizadas, nada vai acontecer.

     

A solução é usar o gancho de ação "pre_post_update", em vez de   "save_post"

enlace

    
por revo 16.03.2013 / 23:03
1

editar Já tentou colocar print_r('hello world'); die(); após function save_prompt($post_id){ para se certificar de que a função realmente é apanhada pelo gancho de ação? / editar

Vários problemas podem estar em jogo:

1: Seu global wpdb precisa estar no topo da sua função, antes de todas as suas declarações condicionais.

2: Suas variáveis $_POST devem ter condicionais de if(isset($_POST['food')) para verificar se os dados que estão sendo postados estão sendo definidos antes de chegar à sua função. Caso contrário, isso pode estar causando um erro fatal, fazendo com que os dados não sejam inseridos o DB.

3: Experimente global $post no topo da função, então você pode chamar as variáveis da postagem como $post->post_type como um objeto através da variável $post .

4: Adicione $wpdb->print_errors; die(); após $insert = $wpdb->insert($table_name, $values); caso a consulta do banco de dados esteja incorreta.

Espero que um deles corrija seu problema.

    
por Caleuanhopkins 11.12.2012 / 10:38
0

Primeiramente, sugiro que você configure o seu site WordPress para facilitar a depuração de enlace

Dessa forma, é fácil ver coisas;)

Para o gancho de ação, acredito que você precisa ligar assim:

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

o save_post hook passa 2 argumentos.

    
por WP Themes 10.01.2013 / 16:53
0

Isso aconteceu comigo. Acontece que eu tinha um conjunto de modelos de páginas (um valor pós-meta para _wp_page_template ) para um modelo que não existia mais, depois de ter trocado de temas. Este pequeno código em 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.' ) );
        }
        ...

anula antes de disparar save_post .

    
por Vic 22.12.2017 / 21:42
0

eu acho que o var_dump em add_action ('save_post', função de callback não está aparecendo!

adicione

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

e verifique se 'data.txt' existe, sim é verdade por save_post.

:)

    
por Futz 14.10.2018 / 21:00
0

Eu também tive esse problema exato e pensei em adicionar respostas em potencial, para ajudar a salvar alguém em algum momento. Foi um problema muito simples que levou alguns dias para me identificar (estou um pouco mais careca no momento - e me sinto um pouco boba) ...

Acontece que uma forma metabólica que estava sendo gerada continha um campo de "ação" que estava sobrescrevendo o campo "ação" do formulário gerado pelo WordPress - o formulário estava sendo usado apenas em um post personalizado e, portanto, a ação errada estava sendo passado para o WordPress no POST para ' wp-admin / post.php 'e acabou sendo manipulado pelo manipulador padrão (no final da instrução switch).

Outro efeito colateral foi que, na atualização ou publicação, o WordPress foi redirecionado para o índice de postagem integrado, em vez de voltar para a postagem editada.

A solução foi remover o elemento de formulário oculto 'action' para o metabox.

Espero que isso ajude alguém de fora ...

    
por user3381109 13.11.2018 / 09:51