概要
WordPressのテーマ・プラグインの検証をするときによく使うコードをまとめます。
開発よりもむしろ全体的なチューニングでよく使うものです。
ログ出力
ログをファイルに書き出す。
/wp-content/debug.log
にログが書き出される。
これをwp-config.php
に書く
define( 'WP_DEBUG', true );
if ( WP_DEBUG ) {
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', true );
@ini_set( 'display_errors', 1 );
define( 'SAVEQUERIES', true );
}
ログ出力
error_log('test message');
Hook
掛かっているフックを調べる
現状どのようなフックが掛かっているかを確認する。
ある程度は何がどんなフックをかけているか把握できる。
add_action('wp_footer', function(){
global $wp_filter;
echo "<pre>";
var_dump($wp_filter['wp_footer']);
echo "</pre>";
});
どのタイミングで起こるのかを確認
WordPressの基本的なアクションフックが始まるごとにログを出力する。結構力技。
テーマのfunctions.php上ではロードが遅いので、プラグインから動かすのがおすすめ。
add_action('muplugins_loaded',function(){error_log('[hook] muplugins_loaded');},0);
add_action('registered_taxonomy',function(){error_log('[hook] registered_taxonomy');},0);
add_action('registered_post_type',function(){error_log('[hook] registered_post_type');},0);
add_action('plugins_loaded',function(){error_log('[hook] plugins_loaded');},0);
add_action('sanitize_comment_cookies',function(){error_log('[hook] sanitize_comment_cookies');},0);
add_action('setup_theme',function(){error_log('[hook] setup_theme');},0);
add_action('load_textdomain',function(){error_log('[hook] load_textdomain');},0);
add_action('after_setup_theme',function(){error_log('[hook] after_setup_theme');},0);
add_action('auth_cookie_malformed',function(){error_log('[hook] auth_cookie_malformed');},0);
add_action('auth_cookie_valid',function(){error_log('[hook] auth_cookie_valid');},0);
add_action('set_current_user',function(){error_log('[hook] set_current_user');},0);
add_action('init',function(){error_log('[hook] init');},0);
add_action('register_sidebar',function(){error_log('[hook] register_sidebar');},0);
add_action('wp_register_sidebar_widget',function(){error_log('[hook] wp_register_sidebar_widget');},0);
add_action('wp_default_scripts',function(){error_log('[hook] wp_default_scripts');},0);
add_action('wp_default_styles',function(){error_log('[hook] wp_default_styles');},0);
add_action('admin_bar_init',function(){error_log('[hook] admin_bar_init');},0);
add_action('add_admin_bar_menus',function(){error_log('[hook] add_admin_bar_menus');},0);
add_action('wp_loaded',function(){error_log('[hook] wp_loaded');},0);
add_action('parse_request',function(){error_log('[hook] parse_request');},0);
add_action('send_headers',function(){error_log('[hook] send_headers');},0);
add_action('parse_query',function(){error_log('[hook] parse_query');},0);
add_action('pre_get_posts',function(){error_log('[hook] pre_get_posts');},0);
add_action('posts_selection',function(){error_log('[hook] posts_selection');},0);
add_action('wp',function(){error_log('[hook] wp');},0);
add_action('template_redirect',function(){error_log('[hook] template_redirect');},0);
add_action('get_header',function(){error_log('[hook] get_header');},0);
add_action('wp_enqueue_scripts',function(){error_log('[hook] wp_enqueue_scripts');},0);
add_action('twentyeleven_enqueue_color_scheme',function(){error_log('[hook] twentyeleven_enqueue_color_scheme');},0);
add_action('wp_head',function(){error_log('[hook] wp_head');},0);
add_action('wp_print_styles',function(){error_log('[hook] wp_print_styles');},0);
add_action('wp_print_scripts',function(){error_log('[hook] wp_print_scripts');},0);
add_action('get_search_form',function(){error_log('[hook] get_search_form');},0);
add_action('loop_start',function(){error_log('[hook] loop_start');},0);
add_action('the_post',function(){error_log('[hook] the_post');},0);
add_action('get_template_part_content',function(){error_log('[hook] get_template_part_content');},0);
add_action('loop_end',function(){error_log('[hook] loop_end');},0);
add_action('get_sidebar',function(){error_log('[hook] get_sidebar');},0);
add_action('dynamic_sidebar',function(){error_log('[hook] dynamic_sidebar');},0);
add_action('get_search_form',function(){error_log('[hook] get_search_form');},0);
add_action('pre_get_comments',function(){error_log('[hook] pre_get_comments');},0);
add_action('wp_meta',function(){error_log('[hook] wp_meta');},0);
add_action('get_footer',function(){error_log('[hook] get_footer');},0);
add_action('get_sidebar',function(){error_log('[hook] get_sidebar');},0);
add_action('twentyeleven_credits',function(){error_log('[hook] twentyeleven_credits');},0);
add_action('wp_footer',function(){error_log('[hook] wp_footer');},0);
add_action('wp_print_footer_scripts',function(){error_log('[hook] wp_print_footer_scripts');},0);
add_action('admin_bar_menu',function(){error_log('[hook] admin_bar_menu');},0);
add_action('wp_before_admin_bar_render',function(){error_log('[hook] wp_before_admin_bar_render');},0);
add_action('wp_after_admin_bar_render',function(){error_log('[hook] wp_after_admin_bar_render');},0);
add_action('shutdown',function(){error_log('[hook] shutdown');},0);
スタイル・スクリプト
キューされているスクリプト一覧を見る
add_action( 'wp_print_scripts', function() {
echo "<pre>";
var_dump(wp_scripts()->queue);
echo "</pre>";
}, 0);
スタイル
add_action( 'wp_print_scripts', function() {
echo "<pre>";
var_dump(wp_styles()->queue);
echo "</pre>";
}, 100);
ポストメタ
add_action('add_meta_boxes', function(){
add_meta_box(
'asashimo',
'post_metas',
'asashimo_render',
null,
'normal',
'high',
);
});
function asashimo_render() {
echo "<pre>";
var_dump(get_post_meta(get_the_ID()));
echo "</pre>";
}
JS
おまけ
スクロール量検出
add_action('wp_footer', function(){
?>
<div
id="asashimo"
style="
position: fixed;
left: 0;
background-color: yellow;
width: 10em;
height: 55px;
padding: 5px;
"
>
<span id="asashimo_scroll_y"></span><br/>
<span id="asashimo_width"></span>
</div>
<script type="text/javascript">
;(function(){
let fix = () => {
document.getElementById('asashimo').style.top = window.innerHeight - 80 + 'px';
}
let w = () => {
document.getElementById('asashimo_width').innerHTML = 'width: ' + window.innerWidth + 'px';
}
let y = () => {
document.getElementById('asashimo_scroll_y').innerHTML = 'scroll-y: ' + window.pageYOffset + 'px';
}
window.addEventListener('DOMContentLoaded', fix, false);
window.addEventListener('DOMContentLoaded', w, false);
window.addEventListener('DOMContentLoaded', y, false);
window.addEventListener('resize', fix, false);
window.addEventListener('resize', w, false);
window.addEventListener('scroll', y, false);
})();
</script>
<?php
});