WordPressは「functions.php」にコードを追加するだけで、テーマに様々な機能を追加することができます。
あらゆることが可能なので、全部を網羅することは無理ですが、私が使って便利だった「ちょっとしたコード」を紹介します。
【PR】「Theme3」では、企業サイトのWordPressベーステーマに、100%GPLテーマ「 Arkhe 」をオススメしています。
「 Arkhe 」は高機能有料プラグイン「 Arkhe Pro Pack 」と連携することによって利便性とカスタマイズ性の両立が可能です。制作・マーケのプロの方に是非!
「Arkhe」の詳細を見る
「Arkhe Pro Pack」(サブスク版)を購入する
「Arkhe Pro Pack」には以下が含まれています。「Arkhe Blocks Pro」と「Arkhe Toolkit」には買い切り版もあります。
・Arkhe Blocks Pro
・Arkhe Toolkit
・Arkhe CSS Editor
もくじ
タイトルに「NEW」を付ける関数
「functions.php」にはフックやフィルター意外にも通常の関数を書くことができます。
以下は、ニュースのタイトルに「NEW」マークを付ける関数です。
function new_mark(){
$days = 14; //Newを表示させたい期間の日数
$today = date_i18n('U');
$entry_day = get_the_time('U');
$keika = date('U',($today - $entry_day)) / 86400;
if ( $days > $keika ):
echo '<span class="newmark">NEW!</span>';
endif;
}
以下のような感じで使うと良いでしょう。
<div id="whatsnew">
<?php
$news_posts = get_posts('post_type=news&posts_per_page=5');
if ( !empty($news_posts) ):
foreach ( $news_posts as $post ):
setup_postdata($post); ?>
<hr/>
<dl>
<a href="<?php the_permalink(); ?>">
<dt><?php echo get_the_date(); ?></dt>
<dd><?php new_mark();?><?php the_title();?></dd></a>
</dl>
<?php
endforeach; // ループの終了
wp_reset_postdata(); // 直前のクエリを復元する ?>
<hr/>
<?php
else: ?>
<hr/>
<dl>
<br/><div class=centering>記事がありません</div><br/>
</dl>
<hr/>
<?php endif; ?>
</div>
【PR】「Theme3」では、ブログ用のWordPressテーマに、人気と高機能を誇る「 SWELL 」をオススメしています。
・ブロックエディター完全対応
・高速化機能を標準搭載
・100%GPL
・企業サイトの制作も可能 他、機能多数。
添付ファイルページを404に
WordPressでは、画像を登録すると添付ページができる機能が備わってます。
例えば「img」という名称の画像を登録すると「https://www.theme3.net/functions-sample/img-1280×790/」というページができます。
テーマによっては、このページがGoogleにキャッシュされたりします。
このような場合は「attachment.php」のアクセスを404にすれば、対策出来ます。
add_action( 'template_redirect', 'status404' );
function status404() {
// attachmentページだった場合
if ( is_attachment() ) {
global $wp_query;
$wp_query->set_404();
status_header(404);
}
}
【PR】「Theme3」では、企業サイトのWordPressベーステーマに、100%GPLテーマ「 Arkhe 」をオススメしています。
「 Arkhe 」は高機能有料プラグイン「 Arkhe Pro Pack 」と連携することによって利便性とカスタマイズ性の両立が可能です。制作・マーケのプロの方に是非!
「Arkhe」の詳細を見る
「Arkhe Pro Pack」(サブスク版)を購入する
「Arkhe Pro Pack」には以下が含まれています。「Arkhe Blocks Pro」と「Arkhe Toolkit」には買い切り版もあります。
・Arkhe Blocks Pro
・Arkhe Toolkit
・Arkhe CSS Editor
管理画面の「投稿」を「コラム」に変更する
WordPressでブログ記事を書く場合は「投稿」でいいのですが、企業サイト等は「コラム」としたほうが、しっくりくる場合があります。
以下のコードで「投稿」を「コラム」に変更できます。
//
/* 「投稿」を「コラム」に変更
---------------------------------------------------------- */
function change_post_menu_label() {
global $menu;
global $submenu;
$menu[5][0] = 'コラム';
$submenu['edit.php'][5][0] = 'コラム一覧';
$submenu['edit.php'][10][0] = '新規追加';
$submenu['edit.php'][16][0] = 'タグ';
}
function change_post_object_label() {
global $wp_post_types;
$labels = &$wp_post_types['post']->labels;
$labels->name = 'コラム';
$labels->singular_name = 'コラム';
$labels->add_new = _x('追加', 'コラム');
$labels->add_new_item = 'コラムの新規追加';
$labels->edit_item = 'コラムの編集';
$labels->new_item = 'コラム情報';
$labels->view_item = 'コラムを表示';
$labels->search_items = 'コラムを検索';
$labels->not_found = '記事が見つかりませんでした';
$labels->not_found_in_trash = 'ゴミ箱に記事は見つかりませんでした';
}
add_action( 'init', 'change_post_object_label' );
add_action( 'admin_menu', 'change_post_menu_label' );
tagを管理用のコードとして使うために一覧で非表示にする
「tag」はタグクラウドのように、キーワードとして使用すると便利です。
それ以外にも特別な投稿を作成し管理するような場合、例えば管理用のタグを指定された記事のみをサイドバーに一覧表示したりする場合、投稿された一覧に表示させないようにできます。
//
/* 管理用タグを非表示 exは2つ目のスライダー
---------------------------------------------------------- *///
function remove_admin_tags($tags,$tax=null,$args=null){
if(!is_admin()){
foreach($tags as $idx=>$tag){
if($tag->name=='ad' || $tag->name=='th'){
unset($tags[$idx]);
}
}
}
return($tags);
}
add_filter('get_terms','remove_admin_tags',10,3);
add_filter('get_the_terms','remove_admin_tags',10,3);
上記の場合タグ「ad」と「th」はタグ一覧に表示されません。
アーカイブページの表示数を指定する
投稿ページのアーカイブは「管理画面→表示設定→1ページに表示する最大投稿数」で1ページに表示できるページを決められます。
functions.phpを使っても表示個数を変更出来ます。
以下はカスタム投稿のアーカイブページの個数を決定しています。
//カスタム投稿「works」の表示数
function change_posts_per_page($query) {
if ( is_admin() || ! $query->is_main_query() )
return;
if ( $query->is_post_type_archive('works') ) { //カスタム投稿タイプを指定
if ( wp_is_mobile() ) :
$query->set( 'posts_per_page', '10' ); //表示件数を指定
else:
$query->set( 'posts_per_page', '9' ); //表示件数を指定
endif;
}
}
add_action( 'pre_get_posts', 'change_posts_per_page' );
スマホとPCで表示数を変更したりも可能です。
カスタム投稿アーカイブの表示順を決定する
カスタム投稿のアーカイブページで表示順を変更することができます。
//
/* カスタム投稿アーカイブページの順序を日付順にする
---------------------------------------------------------- */
add_filter(
'pre_get_posts',
function( $query ) {
if ( is_admin() ) {
// 「custom_post_type」は適宜カスタム投稿タイプスラッグに変更してください.
if ( isset($query->query['post_type']) && 'news' === $query->query['post_type'] ) {
$query->set( 'orderby', 'date' );
$query->set( 'order', 'DESC' );
}
}
}
);
「DESC」を「ASC」に変更すると並び順が逆になります。
メンテナンスモードにする
プラグインを使用しなくてもfunctions.phpでメンテナンスモードを表示できます。
//
/* メンテナンスモード
---------------------------------------------------------- */
function maintenance_mode() {
if ( !current_user_can( 'edit_themes' ) || !is_user_logged_in() ) {
wp_die('ただいまメンテナンス中です。');
}
}
固定ページでGUTENBERG(ブロックエディタ)を無効化する
固定ページを管理用にしていた場合など、GUTENBERG(ブロックエディタ)の機能が不都合な場合があります。
そのような際にはブロックエディタを固定ページだけ無効化してしまいましょう。
//固定ページでGUTENBERG(ブロックエディタ)を無効化
add_filter( 'use_block_editor_for_post_type', 'hide_block_editor', 10, 10 );
function hide_block_editor( $use_block_editor, $post_type ) {
if ( $post_type === 'page' ) return false;
return $use_block_editor;
}
contact form7の外国からのスパム対策
contact form7はWordPressでよく使われるお問い合わせフォームプラグインです。
海外からのスパムメールが入るような場合には、日本語がないとエラーにしてしまうよう対策しましょう。
//メールフォームの textarea にひらがなが無ければ送信できない
add_filter('wpcf7_validate_textarea', 'wpcf7_validation_textarea_hiragana', 10, 2);
add_filter('wpcf7_validate_textarea*', 'wpcf7_validation_textarea_hiragana', 10, 2);
function wpcf7_validation_textarea_hiragana($result, $tag)
{
$name = $tag['name'];
$value = (isset($_POST[$name])) ? (string) $_POST[$name] : '';
if ($value !== '' && !preg_match('/[ぁ-ん]/u', $value)) {
$result['valid'] = false;
$result['reason'] = array($name => 'エラー / この内容は送信できません。(Japanese Only)');
}
return $result;
}
まとめ
私の手掛けた1サイトから、便利そうな「functions.php」のコードを抽出してみました。
他のサイトも合わせれば膨大な数のコードをピックアップできると思います。
今後、「これは!」と思うものがあれば、追加していきたいです。
コメントを残す