PHPコードを検証することは可能ですか?
カスタムメタボックス付きのカスタムポストタイプ(フィルム)があります。
すべてが問題なく機能しているので、カスタムメタボックスに新しいフィルムと詳細を追加できます。
私の問題は更新ボタンにあります。新しい映画を作成する場合は、情報を追加して[更新]をクリックし、白い画面にします。
Function.phpとカスタム投稿タイプに問題があることを知っていますが、どうすれば間違いを見つけることができますか?
ホワイトページのソースを確認すると、2行の空白行が表示されますが、コードには先頭または末尾の空白行はありません。
<?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 ) );
}
?>
あなたのコードは私の側では問題なく動作します。だから、私はあなたの問題は他にあると思います。
標準の debugging または FirePHP を使用できます。私はまた、FirePHPが情報を表示しない場合、すなわち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 );
}
そしてあなたのアクションコールバックの内側:my_log( $_POST, 'Contents of $_POST' );
。
私の知る限りでは、 "validate PHP"のようなものはありません。
あなたが書いている間にエラーを表示するエディタがあります: http://www.jetbrains.com/phpstorm/
add_action('save_post', 'something_process1'); function something_process1() {
if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
print_r($_POST);
}
このコードを使用するフォルダにログファイル( my_logs.txt )を作成します。
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);
}
あなたがsave_post
コールバックでvar_dump()
値を必要とするならば、そこに単に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 ) );
}