WordPressでサイトを作る時にいつもやってる事まとめでも定番プラグインをメモしたけれど、そこは移り変わりが激しいWeb界隈。改めてよく使うプラグイン用の記事を作って、プラグイン周りはこっちの記事を見れば大体大丈夫なようにを更新し続けることにする。
記事投稿・投稿管理系
Duplicate Post(記事複製)
不思議なことに、WordPressのデフォルトの機能には、投稿・固定ページなどの複製機能がないのである。 既存の記事をベースに新規記事を作成したい場合は、既存記事の編集画面からポチポチとコピペを繰り返さなければいけない。
そんな時にはこのプラグイン。1クリックで記事の複製を作成できる優れものだ。
カスタム投稿の複製はデフォルトではオフになっているから、「設定」→「Duplicate Post」の権限のタブから複製できるようにしたい項目にチェックを入れればおk。
Table of Contents Plus(記事の目次生成)
追記:「Table of Contents Plus」の更新が数年止まってしまっているので、最近は同じ感覚で使える「Easy Table of Contents」を利用することが多くなった。
こちらも一応ショートコード「toc」で出力できるけど、オリジナルのクラスがつけられなかったりカスタマイズがあまり効かないのでカムバックTable of Contents Plus。
記事の目次を生成してくれるプラグイン。このエントリーにも↑の方にあります。
プラグインを有効化したら、設置する目次の種類を決めて、自動挿入かショートコードで目次を設置できる。 自動挿入はあんまり使わない。
Table of Contents Plus ショートコードまとめ
Category Order and Taxonomy Terms Order(投稿カテゴリソート)
不思議なことに、WordPressのデフォルトの機能には、投稿カテゴリを任意に並び替える機能がないのである。
カテゴリ一覧を出力する時に、ソートの種類が限られているが、一つ一つ手打ちでなんてやってられっかって時に使わせていただきます。
AddQuicktag
クイックタグを追加編集できるプラグイン。
もう少し挙動が安定してくれるともっとありがたい。
Gutenbergだと使えない。
TinyMCE Advanced(エディター拡張)
投稿画面のビジュアルエディタにいろんな機能を追加してくれるプラグイン。
文字のサイズとか、色とか、ワンタッチで変えられるようになる。絵文字も使える。
WP-PostViews(ランキングとか人気記事に)
サイト内記事のプレビュー数を取得、出力できる。
人気記事の表示とかに使える。
メモ:ループの順番を閲覧数順にする
データベースのpostmetaの値を使えば特に難しい関数書かなくてもランキングアーカイブ作れるのね!
<?php $paged = (int) get_query_var('paged'); $args = array( 'meta_key' => 'views', 'orderby' => 'meta_value_num', 'posts_per_page' => 10, 'paged' => $paged ); $the_query = new WP_Query($args); if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?> <?php get_template_part( 'content' ); ?> <?php endwhile; endif; ?>
WordPress Popular Posts(ランキングとか人気記事にその2)
内部的な動きとかが違うので使い分ける
メモ:カテゴリ内のランキング
カテゴリページと記事ページの時は属するカテゴリ内のランキングを表示して、それ以外の時はトータルのランキングを表示する(マンスリー)
<div class=" popular-posts"> <?php if (is_single() || is_category()) { ?> <?php if (is_single()) { $cat_info = get_the_category(); $cat_now = $cat_info[0]; $now_id = $cat_now->cat_ID; } if (is_category()) { $cat_name = single_cat_title('',false); $now_id =get_cat_ID($cat_name); } ?> <h4 class="title"><span>このカテゴリーの人気記事</span></h4> <script type="text/javascript"> $(function(){ $('#popular-post ul li').each(function(i){ $(this).attr('class','number' + (i+1)); }); }); </script> <?php if (function_exists('wpp_get_mostpopular')) { $args = ' limit=10& range=monthly& order_by=views& thumbnail_width=100& thumbnail_height=65& cat="'.$now_id.'"& stats_views=0& stats_comments=0'; wpp_get_mostpopular($args); } } else { ?> <h4 class="title"><span>ホットエントリー</span></h4> <script type="text/javascript"> $(function(){ $('#popular-post ul li').each(function(i){ $(this).attr('class','number' + (i+1)); }); }); </script> <?php if(function_exists('wpp_get_mostpopular')){ $args = ' limit=10& range=monthly& order_by=views& thumbnail_width=100& thumbnail_height=65& stats_views=0& stats_comments=0'; wpp_get_mostpopular($args); } } ?> </div>
メモ2:出力タグを詳細に設定
functions.phpで設定する
function my_wpp_custom_html( $mostpopular, $instance ){ $output = '<ul class="ranking">'; foreach( $mostpopular as $popular ){ // カスタムフィールド取得 $cf_thumb_id = get_post_meta( $popular->id, 'cf_thumb', true ); $cf_thumb = wp_get_attachment_url($cf_thumb); // 特定カスタム投稿の特定カスタムフィールドの投稿内容を取得 $args = array( 'post_type' => array( 'custom-type' ), 'posts_per_page' => 1, 'meta_query' => array(array( 'key' => 'tax_slug', 'value' => $popular->id, 'compare' => 'LIKE' )) ); $custom_query = new WP_Query( $args ); $output .= '<li class="ranking__item"> <a class="card__link" href="' . get_the_permalink( $popular->id ) . '">'; $output .= '<div class="card__img" style="background-image:url('. esc_html( $cf_thumb ) .');"></div> <div class=""> <h3 class="">' . esc_html( $popular->title ) . '</h3>'; while ( $custom_query->have_posts() ) { $custom_query->the_post(); $mentor_startup = get_field('mentor_startup',false,false); $output .= get_the_title(); } //endwhile wp_reset_postdata(); $output .= get_the_time( "Y.n.j",$popular->id ); $output .= '</div></a></li>'; } $output .= '</ul>'; return $output; } add_filter( 'wpp_custom_html', 'my_wpp_custom_html', 10, 2 ); //出力(任意のファイルで) if(function_exists('wpp_get_mostpopular')){ $args = array ( 'limit' => 4, 'range' => 'monthly', 'post_type' => 'interview', 'order_by' => 'views', ); wpp_get_mostpopular($args); }
参考:WordPress Popular Postsをカスタマイズ|wpp_custom_html・記事のランキング
Block Lab
WordPressのエディタがGutenbergになりAddQuickTagが使えなくなった(クラシックエディタを復活させたり、無理やり使う方法もあるけど)。
クラス付きのブロックとかを簡単に記述できるようにするためにはGutenbergのオリジナルのブロックを追加したいところだが、なかなか手間がかかるので、サクッと対応したい場合はプラグインを使う。
追加したいブロックごとに設定画面で新規追加して、テンプレートファイルも用意したりするのでそこまでお手軽ではないけど。
スラッグ:テンプレートファイル名に関係
カテゴリー:Gutenbergのどのカテゴリに追加するか
キーワード:エディターでの検索用
フィールドラベル:エディターでの表示
フィールドネーム:出力用のID
<?php //テキストの出力 ?> <?php block_field( 'youtube-id' ); ?> <?php //画像は画像URLが出力される ?> <?php $image = block_field( 'field-name-image', false ); // 要素の有無の判定 if ( ! empty( $image ) ) { ?> <img src="<?php block_field( 'field-name-image' ); ?>" alt=""> <?php } ?>
参考:WordPress:簡易的なGutenbergブロックを作成できるプラグイン「Block Lab」
カスタムフィールド系
記事投稿系とも言えるけど分ける。
Advanced Custom Fields(Googlemapに対応)
カスタムフィールドを直感的に追加できるプラグイン。
とにかく多機能なのに使いやすい。アドオンで機能拡張も可能。 投稿画面のカスタムフィールド表示位置もサイドとか記事上とか選べて良し。
個人的にGooglemapの座標に対応しているのがありがたい。 記事投稿時に地図の任意の箇所にピンを指せば、そのフィールドに座標が出力される。
店舗情報とかに便利そう。
メモ:投稿アイキャッチにYoutube動画を表示させたい場合がある時の書き方
登録したカスタムフィールドにYoutube動画IDを入力した場合はYoutube動画、入力が無い時はサムネイルを、サムネイルもない場合はダミー画像を表示させる。
<?php $icatch_youtube = get_field('icatch_youtube'); if($icatch_youtube){ ?> <iframe width="560" height="315" src="https://www.youtube.com/embed/<? echo $icatch_youtube; ?>?controls=0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> <?php } else { ?> <?php if ( has_post_thumbnail() ) { $image_id = get_post_thumbnail_id (); $image_url = wp_get_attachment_image_src ($image_id, true); ?> <?php echo $image_url[0];?> <?php the_post_thumbnail(''); ?> <?php } //has_post_thumbnail ?> <?php } ?>
Smart Custom Fields(繰り返し機能に対応)
カスタムフィールドを直感的に追加できるプラグインその2。
特徴は、デフォルトで繰り返し機能(グループ)に対応している点。 例えば、画像を1〜3枚登録させるカスタムフィールドを作る時に、、「画像1」「画像2」・・・といったカスタムフィールドを作る必要はなく、「画像グループ」という繰り返しに対応したフィールドを作ってしまえば、複数の画像の登録に対応できてしまうのだ。しかも数も任意。
そもそも、元々Advanced Custom Fieldsを使っていた作者さんが、もう少し機能をシンプルにできたらと作成したものらしい!すごい
メモ:グループ出力で1つ以上値がある時のみ外側のdivを表示させる方法
<?php $others = SCF::get('img_special_btm_group'); if(!empty($others[0]['img_special_btm'])) { ?> <div id="special_slide" class="" style="margin-top:40px;"> <?php foreach( $others as $other ) { ?> <div class="img"><img src="<?php $image_id = $other['img_special_btm']; $image_url = wp_get_attachment_image_src ($image_id, 'special-page', true); echo $image_url[0]; ?>" alt=""></div> <?php } ?> </div> <?php } ?>
メモ:PDFのパス出力
<?php $pdfdata = SCF::get('pdf'); $pdfurl = wp_get_attachment_url($pdfdata); echo $pdfurl; ?>
コンタクトフォーム系
Contact Form 7
言わずと知れたコンタクトフォームプラグインの定番。 最近はMW WP Formもよく見るけど、個人的にはこちらの方が使いやすいのだ。
追加プラグインで確認画面や送信内容の確認も可能。
- 確認画面追加:Contact Form 7 add confirm
- 送信内容確認追加:Contact Form Submissions
バックアップ・ファイル操作系
All-in-One WP Migration(バックアップ・インポート・エクスポート)
WordPressの既存のインポート・エクスポートツールは使用条件が意外と厳しく、中途半端に記事があったりすると色々不具合がでたりする。
- 作成者の情報が正しく反映されない。
- 同じタイトルの記事がある場合は上書きされない。つまり該当記事の削除が手間。
- DBの反映範囲がよくわからん
等々である。
このプラグインはDBをまるっと簡単に上書きできるので、何も考えずにエクスポート元のサイトをコピーできる。
もちろん、一歩間違えると大変なことになるので、バックアップは別でしっかりとるように心がけたい。
DB編集権限のない時とか、余計なところをいじってしまう恐怖に襲われた時とかに重宝する。
使い方:WORDPRESSのお引っ越しプラグインはALL-IN-ONE WP MIGRATIONが最強
セキュリティ系
SiteGuard WP Plugin
ログインURLの変更や、ログイン時の画像認証を追加できたりする。
- 管理ページアクセス制限
- ログインページ変更
- 画像認証
- ログイン詳細エラーメッセージの無効化
- ログインロック
- ログインアラート
- フェールワンス
- XMLRPC防御
- 更新通知
- WAFチューニングサポート
多機能だなあ
終わりに
便利なプラグインあったら教えてください。
エントリーは今後も随時更新予定。では、よいプラグインライフを。