워드프레스의 모든 테마에는 function.php을 이용해서 각종 유용한 기능들을 포함한다.
이 파일은 테마 내에서 플러그인처럼 자동으로 작동하게 되는데, 워드프레스의 코어 파일을 편집할 필요없이 자신이 필요한 기능을 자유롭게 개발하여 추가할 수 있다.
이 포스팅은 워드프레스의 function.php에 추가하여 유용하게 사용할 수 있는 Trick에 대해 작성한 글이다.
참고 : 이 문서는 워드 프레스 테마 개발자를 대상으로하며 PHP 지식이 필요하다.
1. 구글 분석 코드 넣기
간단하게 아래의 코드를 function.php 파일에 붙여넣고, 코드 내에 구글 웹 로그 분석 스크립트를 삽입하면 끝.
모든 페이지의 wp_footer 문자열이 있는 소스에 자동으로 입력한 코드를 삽입하게 된다.
// 구글 분석 코드를 여기에 기입
2. 워드프레스 버전 제거하기
워드프레스는 오픈소스다보니, 다양한 취약점이 번번히 생기기 마련이다. 그래서, 항상 워드프레스를 최신버전으로 업데이트를 해야한다.
자신의 블로그의 소스를 보면, 자신의 워드프레스 버전이 표시가 되는데 이 부분을 삭제하여 조금이라도 안전하게 할 수 있지 않을까?
플러그인을 찾는다면 → https://wordpress.org/plugins/better-delete-revision/
function wp_remove_version() {
return '';
}
add_filter('the_generator', 'wp_remove_version');
function remove_cssjs_ver( $src ) {
if( strpos( $src, '?ver=' ) || strpos( $src, '&ver=' ) )
$src = remove_query_arg( 'ver', $src );
return $src;
}
add_filter( 'style_loader_src', 'remove_cssjs_ver', 10, 2 );
add_filter('script_loader_src', 'remove_cssjs_ver', 10, 2 );
3. 워드프레스 검색기능 차단하기
function fb_filter_query( $query, $error = true ) {
if ( is_search() ) {
$query->is_search = false;
$query->query_vars[s] = false;
$query->query[s] = false;
// to error
if ( $error == true )
$query->is_404 = true;
}
}
add_action( 'parse_query', 'fb_filter_query' );
add_filter( 'get_search_form', create_function( '$a', "return null;" ) );
4. 워드프레스 이미지 퀄리티 수정
워드프레스를 사용하는 대부분의 사람들이 개인 웹 호스팅을 이용하는 사람이 많다고 생각한다.
개인 웹 호스팅에서 용량과 트래픽을 줄이기 위해, 블로그에 게재하는 이미지에 대하여 퀄리티를 수정하는 방법을 사용하는 법에 대한 코드이다.
add_filter( 'jpeg_quality', 'wp_jpeg_quality' );
function wp_jpeg_quality() {
return 80; // 80을 자신의 원하는 %로 수정하면 된다.
}
5. 댓글의 HTML 기능을 제거
워드프레스의 댓글 부분은 기본적인 HTML 태그를 사용할 수 있도록 만들어져 있다. 또한, 하이퍼 링크를 사용하여 링크를 남길 수 있다.
만약 워드프레스 댓글에 HTML를 비허용하고자 하는 경우 다음 코드를 추가하면 된다.
add_filter( 'pre_comment_content', 'wp_specialchars' );
비허용하는 경우, 테마 댓글 부분도 수정해야할 듯 싶다. 대부분의 기본 무료테마에는 댓글에 사용가능한 HTML 태그가 적혀있기 때문
+ 16.06.18 (토) 에 추가된 내용입니다.
6. 소스코드의 표시되는 Yoast 제거하기
Yoats SEO 플러그인을 사용하면, 소스코드에 다음과 같은 라인이 추가가 되는 것을 알 수 있다.
<!– This site is optimized with the Yoast WordPress SEO plugin –>
신경 쓰이는 이 부분을 제거하려면 다음 코드를 추가하면 된다.
// Remove All Yoast HTML Comments
if (defined('WPSEO_VERSION')){
add_action('get_header',function (){ ob_start(function ($o){
return preg_replace('/\n?<.*?yoast.*?>/mi','',$o); }); });
add_action('wp_head',function (){ ob_end_flush(); }, 999);
}
+ 아래부터 17.08.07 (월) 에 추가된 내용입니다.
7. emojicon 제거
function disable_wp_emojicons() {
// all actions related to emojis
remove_action( 'admin_print_styles', 'print_emoji_styles' );
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
remove_action( 'wp_print_styles', 'print_emoji_styles' );
remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );
// filter to remove TinyMCE emojis
}
add_action( 'init', 'disable_wp_emojicons' );
8. Meta 제거
//Remove All Meta Generators
function remove_meta_generators($html) {
$pattern = '/<meta name(.*)=(.*)"generator"(.*)>/i';
$html = preg_replace($pattern, '', $html);
return $html;
}
function remove_meta_generators2($html) {
$pattern = '/<meta name(.*)=(.*)"SKYPE_TOOLBAR"(.*)>/i';
$html = preg_replace($pattern, '', $html);
return $html;
}
function clean_meta_generators($html) {
ob_start('remove_meta_generators');
ob_start('remove_meta_generators2');
}
add_action('get_header', 'clean_meta_generators', 100);
add_action('wp_footer', function(){ ob_end_flush(); }, 100);
9. Google Jquery CDN 사용
// google jquery CDN caching
function wpfme_jquery_enqueue() {
wp_deregister_script('jquery');
wp_register_script('jquery', "http" . ($_SERVER['SERVER_PORT'] == 443 ? "s" : "") . "://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js", false, null);
wp_enqueue_script('jquery');
}
if (!is_admin()) add_action("wp_enqueue_scripts", "wpfme_jquery_enqueue", 11);