WordPressカスタマイズまとめ←クリック

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

WordPressカスタマイズ

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

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

正直私も1から何か書けと言われたら無理ですが、ありがたいことにWEB上にはコピペで使えるコードがゴロゴロ転がっています。

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

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

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

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

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

functions.php編集

WordPressのfunctions.php1【個別にCSSを記述できるようにする】

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

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

ワードプレスカスタムCSS

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

functions.php
//投稿ページに個別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」を個別に追記できるコードも載っています。

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

WordPressのfunctions.php2【公開前に確認を表示させる】

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

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

記事の公開を確認する

functions.php
//★記事公開前にアラート
$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');

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

WordPressのfunctions.php3【記事の更新方法を選べるようにする】

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

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

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

記事の更新方法

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

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

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

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

functions.php
// 更新頻度のカスタマイズ
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
//管理画面に更新ボックスの追加
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のfunctions.php4【投稿画面のタイトルに文字数を表示する】

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

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

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

functions.php
//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文字としてカウントされます。

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

WordPressのfunctions.php5【投稿一覧画面に記事IDを表示させる】

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

WordPress投稿ID確認

functions.php
// 記事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】の関連記事(リンクカード)を超カスタマイズ

WordPressのfunctions.php6【リビジョンの自動保存を制限する】

リビジョン数のサンプル

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

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

functions.php
//リビジョン自動保存停止
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
/** リビジョン回数変更 */
define('WP_POST_REVISIONS', 2);
注意

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

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

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

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

WordPressのfunctions.php7【はてブへ自動投稿】

毎回はてブに、自分で投稿するの面倒だなーと思っていたときに見つけたのがこちらのコード。

記事の公開と同時に、はてブに自動投稿してくれます。

functions.php
//はてなブックマークへ投稿時にメール送信
function send_hatena($post_id) { $post = get_post($post_id); $url = get_permalink($post); $send_title = $post->post_title; wp_mail('はてブのメールアドレス',$send_title,$url,'From:自分のメールアドレス' ); return; } add_action( 'publish_post', 'send_hatena', 1 ,6);

それぞれのメールアドレス(赤字)は以下の箇所をコピペしてください。

はてブのメールアドレスとは?

はてなブックマークにログイン

はてなブックマークマイページ

マイページ」をクリック

はてなブックマーク設定

設定」をクリック

はてなブックマークメールアドレス

ブックマーク設定」をクリック

メール投稿先アドレス」をコピーして先ほどの「はてブのメールアドレス」に貼り付ける。

自分のメールアドレスとは?

WordPressメールアドレス

管理画面

ユーザー

あなたのプロフィール

メールアドレス(必須)」のアドレスをコピー「自分のメールアドレス」に貼り付け。

これで自動投稿されます。

はてなブックマーク自動投稿

WordPressのfunctions.php8【SVG画像のデータを読み込ませる】

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

SVG画像サンプル

カゲサイロゴ画像

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

functions.php
//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');

WordPressのfunctions.php9【PCとモバイル(タブレット)の表示をショートコードで指定】

補足

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

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

この文字はPCでしか表示されません。
functions.php
// モバイルと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.php10【投稿画面のサイドバーにメモボックスを表示させる】

WordPress投稿画面メモボックス

その記事でしか使わないコードや文章などを書いておけるので意外と役立ちます。

functions.php
//管理画面メモボックスの追加
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のfunctions.php11【WordPressの管理者IDを非公開にする】

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

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

WordPressログイン画面

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

内緒

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

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

functions.php
<?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
<?php
wp_redirect(home_url());
exit;

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

WordPressのfunctions.php12【Googleアドセンスの広告コードをショートコードで実装】

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

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

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

補足

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

functions.php
//リンク広告用ショートコード 
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の使い方と設定【隠れた機能も全て解説】

WordPressのfunctions.php13【見出し前にアドセンスを自動挿入】

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

補足

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

functions.php
//最初の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タグで問題ありません)
  • 赤字」の部分を追加すると、記事内に広告数を増やせます。

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

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

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

WordPressのfunctions.php14【サイト内検索フォームで日本語の種類を区別しない】

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

サイト内検索結果

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

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

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

サイト内検索結果2

functions.php
//サイト内検索で日本語の種類を区別しない 
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のfunctions.php15【セルフピンバックを無効に】

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

WordPressディスカッション設定

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

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

functions.php
//セルフピンバックを無効にする
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');

まとめ

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

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

WordPressユーザーのためのPHP入門
★Amazonは現金チャージがお得★

チャージ額に応じてポイントが貯まります。

プライム会員」なら最大2.5%ポイント還元!!貯まったポイントは次回のお買い物から使えます。さらに、今なら初回購入1000ポイントキャンペーン中!!

※キャンペーン条件がやや複雑なので不安な方は下記の手順を確認してください

STEP1

キャンペーンページへ

Amazonギフトポイント付与キャンペーン

STEP2

エントリー完了後、「Amazonギフト券チャージタイプ」をクリック

Amazonギフトポイント付与キャンペーンエントリー

STEP3

キャンペーン条件の5000円以上を選択または自由金額を5000円以上に入力次へをクリック

Amazonギフトチャージタイプ購入

STEP4

Amazonギフトチャージタイプ支払い方法選択PC

「コンビニ・ATM・ネットバンキング払い・電子マネー払い」を選択次に進むをクリック


STEP5

注意×10

特に何もせず注文を確定するをクリック

Amazonギフトチャージタイプ購入PC

以下キャンペーン条件から外れてしまうトラップについて。

  • 支払い方法の「電子マネー」はNG
  • Amazonギフト券・Amazonショッピングカード・クーポンも使用できるようになっていますがNG
  • 2000円以上で200ポイントも初回特典ですが、チャージは対象外なのでこちらを選択すると本来1000ポイントもらえるのに200ポイントになってしまうのでNG

私はAmazonヘビーユーザーですが、このキャンペーンに関してはユーザーを欺くようなUX(導線)でよろしくないなと思いました。


STEP6

Amazonギフトチャージタイプ購入確認メール

Amazonに登録してるメールアドレスに「お支払い番号のお知らせ」メールが届きます。お支払い方法別の手順」のリンクをクリックしてください。


STEP7

Amazonギフトチャージタイプ支払い確定PC

もう一度言っておきますが、ここで「電子マネーでの支払い」を選択しないように注意してください。

それ以外の支払い方法をクリックすると詳細が載っているので、期限である6日以内に支払いを済ませて完了です。

以上がキャンペーンの手順です。注意点に気をつけながらぜひこの機会に1000ポイントGETしてください。

プライム会員」なら最大2.5%ポイント還元!!

※チャージした金額の有効期限は安心の10年間

ご質問・ご感想・受付中

「メールアドレス入力欄」を削除した為「返信通知」は届きません。
確実に返信が必要な場合は「お問い合わせ」または「TwitterのDM」よりご連絡ください。

他の方にも有益になると判断した質問やコメントは記事に引用させて頂く場合がありますのであらかじめご了承下さい。