Como depurar a ação 'save_post'?

4

É possível validar o código PHP?

Eu tenho um tipo de postagem personalizada (filme) com caixas personalizadas do Meta.

Tudo está funcionando bem, posso adicionar novos filmes e detalhes às caixas meta personalizadas.

Meu problema é com o botão Atualizar. Se eu criar um novo filme, adicione informações e clique em Atualizar uma tela branca.

Eu sei que o problema é com o function.php e o Custom Post Type, mas como eu acho o erro?

Se eu verificar a origem da página em branco, ele mostrará 2 linhas vazias, mas o código não terá linhas vazias à esquerda ou à direita.

    <?php
        add_action( 'admin_print_styles-post-new.php', 'film_style', 11 );
        add_action( 'admin_print_styles-post.php', 'film_style', 11 );

        function film_style() {
            global $post_type;
            if( 'films' == $post_type )
                wp_enqueue_style( 'film-style', get_stylesheet_directory_uri() . '/css/filmMetaBox.css');
        }
    ?>

    <?php
        add_action('init', 'film_init');
        function film_init(){
            $film_labels = array(
                'name' => _x('Film', 'post type general name'),
                'singular_name' => _x('Films', 'post type singular name'),
                'all_items' => __('All Films'),
                'add_new' => _x('Add new Film', 'film'),
                'add_new_item' => __('Add new Film'),
                'edit_item' => __('Edit Film'),
                'new_item' => __('New film'),
                'view_item' => __('View film'),
                'search_items' => __('Search in films'),
                'not_found' =>  __('No films found'),
                'not_found_in_trash' => __('No films found in trash'), 
                'parent_item_colon' => ''
            );
            $args = array(
                'labels' => $film_labels,
                'public' => true,
                'publicly_queryable' => true,
                'show_ui' => true,
                'query_var' => true,
                'rewrite' => true,
                'capability_type' => 'post',
                'hierarchical' => false,
                'menu_position' => null,
                'supports' => array('title','editor'),
                'has_archive' => 'films',
                'register_meta_box_cb' => 'cd_meta_box_add'
            );
            register_post_type('films',$args);
        }
    ?>
    <?php
        add_action( 'add_meta_boxes', 'cd_meta_box_add' );
        function cd_meta_box_add(){
          add_meta_box( 'my-meta-box-id', 'Film Credits', 'cd_meta_box_cb', 'films', 'normal', 'high' );
        }

        function cd_meta_box_cb( $post ){
          $values = get_post_custom( $post->ID );

          $title = isset( $values['meta_box_title'] ) ? esc_attr( $values['meta_box_title'][0] ) : '';
          $director = isset( $values['meta_box_director'] ) ? esc_attr( $values['meta_box_director'][0] ) : '';
          $desc = isset( $values['meta_box_desc'] ) ? esc_attr( $values['meta_box_desc'][0] ) : '';

          wp_nonce_field( 'my_meta_box_nonce', 'meta_box_nonce' );

          ?>
            <div id="filmMeta">
              <p>
                  <label for="meta_box_title" class="label">Film Title</label>
                  <input type="text" name="meta_box_title" id="meta_box_title" class="textInput" value="<?php echo $title; ?>" />
              </p>
              <p>
                  <label for="meta_box_title" class="label">Director</label>
                  <input type="text" name="meta_box_director" id="meta_box_title" class="textInput" value="<?php echo $director; ?>" />
              </p>
              <p>
                  <label for="meta_box_desc" class="label">Description</label>
                  <textarea name="meta_box_desc" id="meta_box_desc" class="textInput" col="100" row="5"><?php echo $desc; ?></textarea>
              </p>
            </div>
          <?php
        }

        add_action( 'save_post', 'cd_meta_box_save' );
        function cd_meta_box_save( $post_id ){
          if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;// Bail if we're doing an auto save

          // if our nonce isn't there, or we can't verify it, bail
          if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'my_meta_box_nonce' ) ) return;

          if( !current_user_can( 'edit_post' ) ) return;// if our current user can't edit this post, bail

          $allowed = array( // now we can actually save the data
              'a' => array( // on allow a tags
                  'href' => array() // and those anchords can only have href attribute
              )
          );

          if( isset( $_POST['meta_box_title'] ) )//if data set save it.
              update_post_meta( $post_id, 'meta_box_title', wp_kses( $_POST['meta_box_title'], $allowed ) );
          if( isset( $_POST['meta_box_director'] ) )
              update_post_meta( $post_id, 'meta_box_director', wp_kses( $_POST['meta_box_director'], $allowed ) );
          if( isset( $_POST['meta_box_desc'] ) )
              update_post_meta( $post_id, 'meta_box_desc', wp_kses( $_POST['meta_box_desc'], $allowed ) );
        }
    ?>
    
por user668499 30.11.2012 / 12:07

3 respostas

3

Seu código funciona bem no meu lado. Então, eu diria que seu problema está em outro lugar.

Guia de solução de problemas .

Você pode usar a depuração padrão ou FirePHP . Eu também uso o seguinte para casos em que o FirePHP não exibe informações, por exemplo, save_post .

function my_log( $msg, $title = '' )
{
    $error_dir = '/Applications/MAMP/logs/php_error.log';
    $date = date( 'd.m.Y h:i:s' );
    $msg = print_r( $msg, true );
    $log = $title . "  |  " . $msg . "\n";
    error_log( $log, 3, $error_dir );
}

E dentro de seu callback de ação: my_log( $_POST, 'Contents of $_POST' ); .

Até onde eu sei, não existe "validar PHP".
Existem editores que mostram erros enquanto você escreve: enlace

    
por brasofilo 30.11.2012 / 12:38
0

Se você precisar var_dump() valores em seu retorno de chamada save_post , simplesmente exit; :

add_action( 'save_post', 'cd_meta_box_save' );
function cd_meta_box_save( $post_id )
{
    $post = get_post( $post_id );
    // do abort checks
    if (
        wp_is_post_revision( $post );
        OR wp_is_post_autosave( $post );
        OR ! wp_verify_nonce( ... )
        OR ... etc.
    )
        return;

    exit( var_dump( $post, $_POST ) );
}
    
por kaiser 03.10.2013 / 04:18
0

Método 1:

add_action('save_post', 'something_process1');  function something_process1() {
   if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
   print_r($_POST);
}

Método 2:

crie um arquivo de log ( my_logs.txt ) em uma pasta, onde você usa este código:

add_action('save_post', 'something_process2',11);   function something_process2() {
    print_r($_POST);
    file_put_contents(dirname(__file__).'/my_logs.txt', "\r\n\r\n".ob_get_contents(), FILE_APPEND);
}
    
por T.Todua 29.09.2014 / 09:50