SWELLで特化サイト作ってみた

WordPressのfunctions.phpで使える超カスタマイズコードまとめ

WordPressのfunctionsカスタマイズ

WordPressはCSSHTMLをある程度マスっていれば、デザイン(見た目)を整えることができます。イメージとしてはHTMLで書いたコード(白黒・無形)にCSSで色や形をつける感じですね。

一方、本題のfunctions.phpで使うコードは、WordPressで出来る事(機能)を増やせます。

ありがたいことにWEB上にはコピペで使えるコードがゴロゴロ転がっています。

そこで当サイトが現在使っているものや過去使っていたもの(現テーマに実装されている為外した)で便利なものを抜粋しました。(長いので目次から気になるものだけ見てください。)

phpをいじるので、FTPが使えない人はやめておきましょう。

FTPをサクッとマスターしたい人はこちら

WordPress子テーマCyberduckの使い方WordPressの子テーマを分かりやすく解説

この記事で紹介するコードは以下の箇所にコピペしてください。

functions.php編集

投稿画面にCSSを記述できるボックスを追加する

例えば、カスタマイズコードを書くコンテンツを作成する場合、1つの記事でしか使わないコード(説明用)って結構ありますよね?

そういったコードをスタイルシート (style.css)に全部記述してたらすごい量になってしまうので、以下のコードで指定した記事だけに個別CSSを適用できるボックスを作れます。

ワードプレスカスタムCSS

慣れてくると、ページごとにデザインを変えたり、好きなランディングページを作成できたりと何かと役立ちます。

functions.php
copyする
//投稿ページに個別CSS追加 add_action('admin_menu', 'custom_css_hooks'); add_action('save_post', 'save_custom_css'); add_action('wp_head','insert_custom_css'); function custom_css_hooks() { add_meta_box('custom_css', 'Custom CSS', 'custom_css_input', 'post', 'normal', 'high'); add_meta_box('custom_css', 'Custom CSS', 'custom_css_input', 'page', 'normal', 'high'); add_meta_box('custom_css', 'Custom CSS', 'custom_css_input', 'post_lp', 'normal', 'high'); } function custom_css_input() { global $post; echo '<input type="hidden" name="custom_css_noncename" id="custom_css_noncename" value="'.wp_create_nonce('custom-css').'" />'; echo '<textarea name="custom_css" id="custom_css" rows="5" cols="30" style="width:100%;">'.get_post_meta($post->ID,'_custom_css',true).'</textarea>'; } function save_custom_css($post_id) { if (!wp_verify_nonce($_POST['custom_css_noncename'], 'custom-css')) return $post_id; if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id; $custom_css = $_POST['custom_css']; update_post_meta($post_id, '_custom_css', $custom_css); } function insert_custom_css() { if (is_page() || is_single()) { if (have_posts()) : while (have_posts()) : the_post(); echo '<style type="text/css">'.get_post_meta(get_the_ID(), '_custom_css', true).'</style>'; endwhile; endif; rewind_posts(); }}

赤字」のコードは「WordPressテーマ「ストーク」 」(ハミングバードでも使用可)のランディングページで使えるようにするために追記したコードなので、違うテーマの方は削除してください。

ちなみに、上記の記事には「JavaScript」を個別に追記できるコードも載っています。

当サイトではあまり使わないので載せていません。

公開ボタンを押した後に確認ボックスを表示させる

記事作成中、まだ途中なのに間違えて「公開」ボタン押しちゃったってことないですか?

こちらはそんなミスに備えて、以下のように確認してくれる機能の追加です。

記事の公開を確認する

functions.php
copyする
//★記事公開前にアラート $c_message = '記事を公開していいですか?'; function confirm_publish(){ global $c_message; echo '<script type="text/javascript"><!-- var publish = document.getElementById("publish"); if (publish !== null) publish.onclick = function(){ return confirm("'.$c_message.'"); }; // --></script>'; } add_action('admin_footer', 'confirm_publish');

赤字」部分を変えることで、確認を好きな言葉に変更できます。

記事の更新方法を選べるようにする

通常は記事をリライトすれば更新日も変更しますよね。その方がSEO的にもユーザーの為にも良いです。

ただ誤字脱字をちょろっと修正するだけで、更新日を変更するのもなんだかな〜と思っていた矢先、こちらコードを見つけました。

追記後は投稿画面にこんな感じで表示されます。

記事の更新方法

  • 「通常更新」
  • 更新すると更新日が変更される

  • 「修正のみ」
  • 更新しても更新日は変更されない

  • 「更新日時削除」
  • 更新日を最初の公開日に変更する

  • 「更新日時を手動で変更」
  • 自分が好きな日に更新したことにできてしまうチートコード

functions.php
copyする
// 更新頻度のカスタマイズ if( function_exists( 'thk_post_update_level' ) === false ): function thk_post_update_level() { add_meta_box( 'update_level', '更新方法', 'post_update_level_box', 'post', 'side', 'default' ); add_meta_box( 'update_level', '更新方法', 'post_update_level_box', 'page', 'side', 'default' ); } add_action( 'admin_menu', 'thk_post_update_level' ); endif; //メインフォーム if( function_exists( 'post_update_level_box' ) === false ): function post_update_level_box() { global $post; ?> <div style="padding-top: 5px; overflow: hidden;"> <div style="padding:5px 0"><input name="update_level" type="radio" value="high" checked="checked" />通常更新</div> <div style="padding: 5px 0"><input name="update_level" type="radio" value="low" />修正のみ(更新日時を変更せず記事更新)</div> <div style="padding: 5px 0"><input name="update_level" type="radio" value="del" />更新日時消去(公開日時と同じにする)</div> <div style="padding: 5px 0; margin-bottom: 10px"><input id="update_level_edit" name="update_level" type="radio" value="edit" />更新日時を手動で変更</div> <?php if( get_the_modified_date( 'c' ) ) { $stamp = '更新日時: <span style="font-weight:bold">' . get_the_modified_date( __( 'M j, Y @ H:i' ) ) . '</span>'; } else { $stamp = '更新日時: <span style="font-weight:bold">未更新</span>'; } $date = date_i18n( get_option('date_format') . ' @ ' . get_option('time_format'), strtotime( $post->post_modified ) ); ?> <style> .modtime { padding: 2px 0 1px 0; display: inline !important; height: auto !important; } .modtime:before { font: normal 20px/1 'dashicons'; content: '\f145'; color: #888; padding: 0 5px 0 0; top: -1px; left: -1px; position: relative; vertical-align: top; } #timestamp_mod_div { padding-top: 5px; line-height: 23px; } #timestamp_mod_div p { margin: 8px 0 6px; } #timestamp_mod_div input { border-width: 1px; border-style: solid; } #timestamp_mod_div select { height: 21px; line-height: 14px; padding: 0; vertical-align: top;font-size: 12px; } #aa_mod, #jj_mod, #hh_mod, #mn_mod { padding: 1px; font-size: 12px; } #jj_mod, #hh_mod, #mn_mod { width: 2em; } #aa_mod { width: 3.4em; } </style> <span class="modtime"><?php printf( $stamp, $date ); ?></span> <div id="timestamp_mod_div" onkeydown="document.getElementById('update_level_edit').checked=true" onclick="document.getElementById('update_level_edit').checked=true"> <?php thk_time_mod_form(); ?> </div> </div> <?php } endif; //更新日時変更の入力フォーム if( function_exists( 'thk_time_mod_form' ) === false ): function thk_time_mod_form() { global $wp_locale, $post; $tab_index = 0; $tab_index_attribute = ''; if ( (int) $tab_index > 0 ) { $tab_index_attribute = ' tabindex="' . $tab_index . '"'; } $jj_mod = mysql2date( 'd', $post->post_modified, false ); $mm_mod = mysql2date( 'm', $post->post_modified, false ); $aa_mod = mysql2date( 'Y', $post->post_modified, false ); $hh_mod = mysql2date( 'H', $post->post_modified, false ); $mn_mod = mysql2date( 'i', $post->post_modified, false ); $ss_mod = mysql2date( 's', $post->post_modified, false ); $year = '<label for="aa_mod" class="screen-reader-text">年' . '</label><input type="text" id="aa_mod" name="aa_mod" value="' . $aa_mod . '" size="4" maxlength="4"' . $tab_index_attribute . ' autocomplete="off" />年'; $month = '<label for="mm_mod" class="screen-reader-text">月' . '</label><select id="mm_mod" name="mm_mod"' . $tab_index_attribute . ">\n"; for( $i = 1; $i < 13; $i = $i +1 ) { $monthnum = zeroise($i, 2); $month .= "\t\t\t" . '<option value="' . $monthnum . '" ' . selected( $monthnum, $mm_mod, false ) . '>'; $month .= $wp_locale->get_month_abbrev( $wp_locale->get_month( $i ) ); $month .= "</option>\n"; } $month .= '</select>'; $day = '<label for="jj_mod" class="screen-reader-text">日' . '</label><input type="text" id="jj_mod" name="jj_mod" value="' . $jj_mod . '" size="2" maxlength="2"' . $tab_index_attribute . ' autocomplete="off" />日'; $hour = '<label for="hh_mod" class="screen-reader-text">時' . '</label><input type="text" id="hh_mod" name="hh_mod" value="' . $hh_mod . '" size="2" maxlength="2"' . $tab_index_attribute . ' autocomplete="off" />'; $minute = '<label for="mn_mod" class="screen-reader-text">分' . '</label><input type="text" id="mn_mod" name="mn_mod" value="' . $mn_mod . '" size="2" maxlength="2"' . $tab_index_attribute . ' autocomplete="off" />'; printf( '%1$s %2$s %3$s @ %4$s : %5$s', $year, $month, $day, $hour, $minute ); echo '<input type="hidden" id="ss_mod" name="ss_mod" value="' . $ss_mod . '" />'; } endif; // 「修正のみ」は更新しない。それ以外は、それぞれの更新日時に変更する if( function_exists( 'thk_insert_post_data' ) === false ): function thk_insert_post_data( $data, $postarr ){ $mydata = isset( $_POST['update_level'] ) ? $_POST['update_level'] : null; if( $mydata === 'low' ){ unset( $data['post_modified'] ); unset( $data['post_modified_gmt'] ); } elseif( $mydata === 'edit' ) { $aa_mod = $_POST['aa_mod'] <= 0 ? date('Y') : $_POST['aa_mod']; $mm_mod = $_POST['mm_mod'] <= 0 ? date('n') : $_POST['mm_mod']; $jj_mod = $_POST['jj_mod'] > 31 ? 31 : $_POST['jj_mod']; $jj_mod = $jj_mod <= 0 ? date('j') : $jj_mod; $hh_mod = $_POST['hh_mod'] > 23 ? $_POST['hh_mod'] -24 : $_POST['hh_mod']; $mn_mod = $_POST['mn_mod'] > 59 ? $_POST['mn_mod'] -60 : $_POST['mn_mod']; $ss_mod = $_POST['ss_mod'] > 59 ? $_POST['ss_mod'] -60 : $_POST['ss_mod']; $modified_date = sprintf( '%04d-%02d-%02d %02d:%02d:%02d', $aa_mod, $mm_mod, $jj_mod, $hh_mod, $mn_mod, $ss_mod ); if ( ! wp_checkdate( $mm_mod, $jj_mod, $aa_mod, $modified_date ) ) { unset( $data['post_modified'] ); unset( $data['post_modified_gmt'] ); return $data; } $data['post_modified'] = $modified_date; $data['post_modified_gmt'] = get_gmt_from_date( $modified_date ); } elseif( $mydata === 'del' ) { $data['post_modified'] = $data['post_date']; } return $data; } add_filter( 'wp_insert_post_data', 'thk_insert_post_data', 10, 2 ); endif;

私は結構リライトするので「修正のみ」は本当にありがたい。

いちいち更新されて、イラついていた方は活用してください。

さらに「更新」と「更新しない」項目だけでよければこちら

WordPress更新方法選択

functions.php
copyする
//管理画面に更新ボックスの追加 add_action( 'admin_menu', 'add_update_level_custom_box'); add_action( 'save_post', 'save_custom_field_postdata_of_time'); function add_update_level_custom_box(){ add_meta_box( 'update_level', '更新方法', 'html_update_level_custom_box', 'post', 'side', 'high' ); } function html_update_level_custom_box() { $update_level = get_post_meta( $_GET['post'], 'update_level' ); echo '<div style="padding-top: 3px; overflow: hidden;">'; echo '<div style="width: 100px; float: left;"><input name="update_level" type="radio" value="high" '; if( $update_level[0]=="" || $update_level[0]=="high" ) echo ' checked="checked"'; echo ' />通常更新</div><div style="width: 100px; float: left;"><input name="update_level" type="radio" value="low" '; if( $update_level[0]=="low" ) echo ' checked="checked"'; echo '/>更新しない<br /></div>'; echo '</div>'; } function save_custom_field_postdata_of_time( $post_id ) { $mydata = $_POST['update_level']; if( "" == get_post_meta( $post_id, 'update_level' )) { add_post_meta( $post_id, 'update_level', $mydata, true ) ; } elseif( $mydata != get_post_meta( $post_id, 'update_level' )) { update_post_meta( $post_id, 'update_level', $mydata ) ; } elseif( "" == $mydata ) { delete_post_meta( $post_id, 'update_level' ) ; }} add_filter( 'wp_insert_post_data', 'my_insert_post_data', 10, 2 ); function my_insert_post_data( $data, $postarr ){ $mydata = $_POST['update_level']; if( $mydata == "low" ){ unset( $data["post_modified"] ); unset( $data["post_modified_gmt"] ); } return $data; }

赤字」箇所を変更すればボックス内のテキストを変更できます。

投稿画面のタイトルに文字数を表示する

テーマによっては、最初から実装されているものもあるみたいですが「WordPressテーマ「ストーク」 」にはなかったので追記したコード。(現テーマSANGOにもない)

タイトル文字数をカウントしてくれるので、タイトル決めがスムーズになります。

WordPressタイトルカウンター実装

functions.php
copyする
//Wordpress投稿画面のタイトル文字数をカウントする function count_title_characters() {?> <script type="text/javascript"> jQuery(document).ready(function($){ //全角を1、半角を0.5として数える function count_zen_han_characters(str) { len = 0; str = escape(str); for (i=0;i<str.length;i++,len++) { if (str.charAt(i) == "%") { if (str.charAt(++i) == "u") { i += 3; len++; } i++; } } return len / 2; } //in_selの文字数をカウントしてout_selに出力する function count_characters(in_sel, out_sel) { $(out_sel).html( count_zen_han_characters($(in_sel).val()) ); } //ページ表示に表示エリアを出力 $('#titlewrap').after('<div style="position:absolute;top:-24px;right:0;color:#666;background-color:#f7f7f7;padding:1px 2px;border-radius:5px;border:1px solid #ccc;">文字数<span class="wp-title-count" style="margin-left:5px;">0</span></div>'); //ページ表示時に数える count_characters('#title', '.wp-title-count'); //入力フォーム変更時に数える $('#title').bind("keydown keyup keypress change",function(){ count_characters('#title', '.wp-title-count'); }); }); </script><?php } add_action( 'admin_head-post-new.php', 'count_title_characters' ); add_action( 'admin_head-post.php', 'count_title_characters' );

赤字」の部分を削除すれば、半角も1文字としてカウントされます。

地味にこれ重宝しますよ。

投稿一覧画面に記事IDを表示させる

記事内に内部リンク(自分の関連する記事)を貼るときに、IDが必要な場合はこのコードを追記しておくと投稿一覧に表示されるので見やすくて良いです。

WordPress投稿ID確認

functions.php
copyする
// 記事IDを投稿画面に表示させる function add_posts_columns_postid($columns) { $columns['postid'] = 'ID'; return $columns; } function add_posts_columns_postid_row($column_name, $post_id) { if( 'postid' == $column_name ) { echo $post_id; } } add_filter( 'manage_posts_columns', 'add_posts_columns_postid' ); add_action( 'manage_posts_custom_column', 'add_posts_columns_postid_row', 10, 2 );

特に「WordPressテーマ「ストーク」 」や「SANGO」では、この記事IDを使って以下のようなリンクカードを作れるのでかなり便利です。

ストーク関連記事カスタマイズ【STORK】の関連記事(リンクカード)を超カスタマイズ

リビジョンの自動保存を制限する

リビジョン数のサンプル

どんどん溜まってく、リビジョンってウザいですよね。

前はプラグインで消していたんですが、良いコードを見つけたので今はこれを使ってます。

functions.php
copyする
//リビジョン自動保存停止 function disable_autosave() { wp_deregister_script('autosave'); } add_action( 'wp_print_scripts', 'disable_autosave' );

上記のコードで「リビジョンの自動保存は停止」できるんですが、もう1つ「wp-config.php」に以下のコードも追記すると「リビジョン数に制限」をかけれます。

※クリックすると画像拡大

wp-config.php編集

FTPソフト」を開く

「wp-config.php」ファイルを探す

右クリックで「エディタで編集」→「TextEdit」をクリック

リビジョン回数変更コード

「Sets up WordPress vars and included files」の上に以下のコードをコピペしてください。

wp-config.php
copyする
/** リビジョン回数変更 */ define('WP_POST_REVISIONS', 2);
注意

記述ミスすると画面真っ白になるから気をつけて!!

赤字」の箇所がリビジョン数の指定です。

当サイトは一応「」にしていますが、好きな数でOKです。

リビジョン自体を無効化したければ「false」と入力してください。

SVG画像のデータを読み込ませる

昨今では画質も非常に重要です。特にロゴやサイトタイトルなどは画質が一切荒くならないSVGがおすすめです。

SVG画像サンプル

カゲサイロゴ画像

当サイトで使用している「SANGO」では標準装備されています。

functions.php
copyする
//SVG画像を読み込む function add_file_types_to_uploads($file_types){ $new_filetypes = array(); $new_filetypes['svg'] = 'image/svg+xml'; $file_types = array_merge($file_types, $new_filetypes ); return $file_types; } add_action('upload_mimes', 'add_file_types_to_uploads');

PCとモバイル(タブレット)の表示を分けるショートコードの作成

補足

当サイトで使用している「SANGO」では標準装備されています。

以下の文章をPCとモバイルで確認して下さい。

この文字はPCでしか表示されません。
functions.php
copyする
// モバイルとPCで表示を分けるショートコードの作成 // PCでのみ表示するコンテンツ function if_is_pc($atts, $content = null ) { $content = do_shortcode( $content); if(!is_mobile()) {return $content; } } add_shortcode('pc', 'if_is_pc'); // スマートフォン・タブレットでのみ表示するコンテンツ function if_is_nopc($atts, $content = null ) { $content = do_shortcode( $content); if(is_mobile()) {return $content; } } add_shortcode('nopc', 'if_is_nopc');

以下のショートコードをAddQuicktagなどに登録しておきましょう。

AddQuicktagの設定AddQuicktagの使い方と設定【隠れた機能も全て解説】

PCでのみ表示させる
[pc]ここに文章や画像を入れる[/pc]

スマホタブレットのみ表示させる
[nopc]ここに文章や画像を入れる[/nopc]

これがあると広告をデバイスによって分けたりできるのでかなり便利です。

投稿画面のサイドバーにメモボックスを表示させる

WordPress投稿画面メモボックス
その記事でしか使わないコードや文章などを書いておけるので意外と役立ちます。
functions.php
copyする
//管理画面メモボックスの追加 add_action('admin_menu', 'add_memo_custom_box'); if ( !function_exists( 'add_memo_custom_box' ) ): function add_memo_custom_box(){ add_meta_box( 'singular_memo_settings','メモ', 'view_memo_custom_box', 'post', 'side' ); add_meta_box( 'singular_memo_settings','メモ', 'view_memo_custom_box', 'page', 'side' ); } endif; if ( !function_exists( 'view_memo_custom_box' ) ): function view_memo_custom_box(){?> <textarea name="the_page_memo" placeholder="" rows="10" style="width: 100%;"><?php echo get_the_page_memo(); ?></textarea> <?php } endif; add_action('save_post', 'memo_custom_box_save_data'); if ( !function_exists( 'memo_custom_box_save_data' ) ): function memo_custom_box_save_data($post_id){ if (isset($_POST['the_page_memo'])) { $the_page_memo = $_POST['the_page_memo']; update_post_meta( $post_id, 'the_page_memo', $the_page_memo ); } } endif; if ( !function_exists( 'get_the_page_memo' ) ): function get_the_page_memo($post_id = null){ if (!$post_id) { $post_id = get_the_ID(); } $value = get_post_meta($post_id, 'the_page_memo', true); return $value; } endif; add_filter( 'manage_posts_columns', 'customize_admin_manage_posts_columns' ); if ( !function_exists( 'customize_admin_manage_posts_columns' ) ): function customize_admin_manage_posts_columns($columns) { $columns['memo'] = 'メモ'; return $columns; } endif; add_action( 'manage_posts_custom_column', 'customize_admin_add_column', 10, 2 ); if ( !function_exists( 'customize_admin_add_column' ) ): function customize_admin_add_column($column_name, $post_id) { if ( 'memo' == $column_name ) { $thum = esc_html(get_the_page_memo($post_id)); } if ( isset($thum) && $thum ) { echo $thum; } } endif;

表示オプションにチェックをすると、投稿一覧にもメモが表示されます。

WordPress表示オプションカスタマイズ

青字」箇所を変更すれば表示オプション内のテキストを変更できます。

赤字」箇所を変更すればボックスのテキストを変更できます。

WordPressの管理者IDを非公開にする

WordPressは何も設定しないと他人の管理者ID(ユーザーID)を簡単に調べられます。(IDの調べ方についてはここでは言及しません)

まぁ管理者IDがバレたからといってそれだけで何かされるわけではないですが、少なくとも管理画面にログイン時する際のユーザーIDはバレるわけなので、悪い人たちからすればパスワードだけ破れば管理画面にログイン出来てしまうわけですね。

WordPressログイン画面

上の段がバレるってことです。

内緒

実は某有名〇〇ブロガーの方この辺やってない(2018.8月時点)ので、管理者IDは私の心の中にあります。笑

そこで、コードを記述して管理者IDを隠してしまうというわけです。

functions.php
copyする
<?php function remove_author_parameter() { $_GET['author'] = ''; } add_action( 'init', 'remove_author_parameter' );

ただこれだけでは不完全で、FTPで子テーマに新規ファイルを作成します。

FTP author.phpエディタ編集

author.php」というファイルを新規作成し「子テーマフォルダ」の中に入れます。

author.php」右クリック→「エディタで編集」→「TextEdit」をクリック

author.phpコード入力

以下のコードを貼り付けて保存

author.php
copyする
<?php wp_redirect(home_url()); exit;

これでログイン画面にアクセスしようとしたら、トップページに飛ぶようになりました。

Googleアドセンスの広告コードをショートコードで実装する

今は自動広告や定位置に自動で出力してくれるコードもあるので出番は少ないかもしれません。

でも分析が得意な方であれば読者が離脱する位置を特定できるので、ピンポイントで広告を差し込みたい。そんな方のためのコードです。

当サイトでは以下のの3つを作成使っています。

補足

関連コンテンツはGoogleから許可されたサイトでしか使えません。

functions.php
copyする
//リンク広告用ショートコード function adlinkShortCode() { return 'ここにアドセンスのリンク広告コードを入れる'; } add_shortcode('adlink', 'adlinkShortCode'); //レスポンシブ広告ショートコード function adResponsiveShortCode() { return 'ここにアドセンスのレスポンシブ広告コードを入れる'; } add_shortcode('adresponsive', 'adResponsiveShortCode'); //関連コンテンツショートコード function adRelationShortCode() { return 'ここにアドセンスの関連コンテンツコードを入れる'; } add_shortcode('adrelation', 'adRelationShortCode');

赤字」の箇所を変更すれば、以下で使用するショートコード名を変更できます。

実際はこんな感じ

アドセンス広告コードサンプル

補足

レスポンシブ広告コードの中に data-ad-format="auto"というのがあるので、フォーマット形式を data-ad-format="rectangle"に変更するとどデカイ広告になるのでオススメ

アドセンス広告PCサンプル

PC表示サンプル

アドセンス広告スマホサンプル

スマホ表示サンプル

記事で使うショートコード

  • リンク広告[[adlink]]
  • レスポンシブ広告[[adresponsive]]
  • 関連コンテンツ[[adrelation]]

上記のショートコードを貼り付けるだけで、それぞれの広告が表示されます。

ショートコードはAddQuicktagなどに登録しておきましょう。

AddQuicktagの設定AddQuicktagの使い方と設定【隠れた機能も全て解説】

見出し前にアドセンス広告を自動挿入する

先ほど触れた自動挿入ですね。応用すれば、数を増やしたり、見出し以外にも設置できます。

補足

「SANGO」は最初の見出し前に挿入できるウィジェットが標準装備されています。

functions.php
copyする
//最初のH2見出しタグの直前にアドセンス広告を挿入する function insert_ad_before_first_tag($the_content) { $ad = ' ここに広告コードを貼り付け '; if(is_single()) { $tag = '/^<h2.*?>.+?<\/h2>$/im'; //タグの種類 if(preg_match_all($tag, $the_content, $tags)) { if($tags[0][0]) { //1番目のタグの直前に$adを挿入 $the_content = str_replace($tags[0][0], $ad.$tags[0][0], $the_content); } } } return $the_content; } add_filter('the_content','insert_ad_before_first_tag');
  • 青字」の広告コードは「リンク広告がオススメ
  • 緑字」でタグの種類を指定できます。(基本h2タグで問題ありません)
  • 赤字」の部分を追加すると、記事内に広告数を増やせます。

あまりオススメしませんが、広告数を増やす場合は以下のコードを「赤字」の真下に追加してください。

functions.php
copyする
if($tags[0][1]) { //2番目のタグの直前に$adを挿入 $the_content = str_replace($tags[0][1], $ad.$tags[0][1], $the_content); }

上記「赤字」部分の数字を変更し、追記していくと3番目、4番目と増やせます。

サイト内の検索フォームで日本語の種類を区別しないようにする

例えばサイト内で「プラグイン」の記事を検索したい場合「ぷらぐいん」と平仮名で入力しても以下のように反応しません。

サイト内検索結果

ところが以下のコードを使うと

  • 「ひらがな」「カタカナ」「半角カナ」
  • 「全角カナ」「全角英数」「半角英数」

を区別しなくなるので、検索機能を向上させることができます。

サイト内検索結果2

functions.php
copyする
//サイト内検索で日本語の種類を区別しない function change_search_char($where, $obj) { if ($obj->is_search) { $where = str_replace(".post_title", ".post_title COLLATE utf8_unicode_ci", $where ); $where = str_replace(".post_content", ".post_content COLLATE utf8_unicode_ci", $where ); } return $where; } add_filter( 'posts_where', 'change_search_char', 10, 2 );

セルフピンバックを無効にする

WordPressは、以下の箇所にチェックを入れて記事内にリンクを貼る(参考サイトなど)と相手に「リンク貼ったよー」と伝えてくれる機能があります。

WordPressディスカッション設定

ただし、そのままでは内部リンク(関連記事など)にも効いてしまうので、通知がウザいのです。

以下のコードで自分への通知を無効にします。

functions.php
copyする
//セルフピンバックを無効にする function no_self_ping(&$links) { $home = get_option('home'); foreach($links as $l => $link) if(0 === strpos($link, $home)) unset($links[$l]); } add_action('pre_ping', 'no_self_ping');

WordPressのfunctions.phpで使えるカスタマイズコード【まとめ】

いかがでしたか?CSSがひと段落したら、こういった便利コードを検索するのもなかなか楽しいですよ。

コードを提供してくれた筆者に感謝しつつ、ありがたく使わせてもらいましょう。

コメントはお気軽にどうぞ

コスパ最高の電動スタンディングデスクを本気でレビューしてみたぜ!!
記事を読んでみる