WordPressは「functions.php」にコードを追加するだけで、テーマに様々な機能を追加することができます。
あらゆることが可能なので、全部を網羅することは無理ですが、私が使って便利だった「ちょっとしたコード」を紹介します。
【PR】「Theme3」では、企業サイトのWordPressテーマに「 ワードプレステーマTCD 」をオススメしています。
WordPressテーマ「GENESIS」の詳細をTCDのページで見る
ブロックエディタ対応
カスタム投稿タイプ「お知らせ」「サービス(事業案内)」
SEO機能(metaタグ、OGP、高速化)他、機能多数。
ご購入は以下のバナーリンクページの購入ボタンをクリックしてください。
もくじ
タイトルに「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テーマに「 ワードプレステーマTCD 」をオススメしています。
WordPressテーマ「SOLARIS」の詳細をTCDのページで見る
レスポンシブ対応
カスタム投稿タイプ「お知らせ」「企業情報」「サービス」「プロジェクト」
高速化設定(絵文字読み込み・コード最適化)他、機能多数。
ご購入は以下のバナーリンクページの購入ボタンをクリックしてください。
添付ファイルページを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テーマに「 ワードプレステーマTCD 」をオススメしています。
WordPressテーマ「GENESIS」の詳細をTCDのページで見る
ブロックエディタ対応
カスタム投稿タイプ「お知らせ」「サービス(事業案内)」
SEO機能(metaタグ、OGP、高速化)他、機能多数。
ご購入は以下のバナーリンクページの購入ボタンをクリックしてください。
管理画面の「投稿」を「コラム」に変更する
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」のコードを抽出してみました。
他のサイトも合わせれば膨大な数のコードをピックアップできると思います。
今後、「これは!」と思うものがあれば、追加していきたいです。
コメントを残す