個人的によく使うWordPressのショートコードをまとめてご紹介します。
ショートコードを上手に使うと、プログラムを意識せずに複雑な処理を一行で呼び出したり、良く使う処理を使い回したりできるようになります。
あと業務上、開発効率を上げるために本番環境と開発環境のURLの差異を吸収するために使ったりもしています。
ショートコードとは?的な説明はありせんので、ご了承ください。
以下で紹介するコード全部「functions.php」に貼り付けておけば基本的に使えると思います。
自分は、「functions.php」のコードが膨大になるとメンテナンス性が落ちるので、shortcode.phpというファイルを作成してそちらに書いてます。
もちろんshortcode.phpはfunctions.phpから読み込んで使ってくださいね。「require_once(get_template_directory().’/shortcode.php’);」
よく使うショートコード
まずは、WordPress案件でいつも登録しているショートコードをご紹介します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | /*------------------------------------------- よく使うショートコード -------------------------------------------*/ // サイトのURL // 使い方:[url] add_shortcode('url', 'sh_url'); function sh_url() { return get_bloginfo('url'); } // サイトのURLパス(httpを削除) // 使い方:[urlpath] add_shortcode('urlpath', 'sh_urlpath'); function sh_urlpath() { return preg_replace('/^(https?:\/\/)/', '', get_bloginfo('url')); } // WordPress をインストールしたディレクトリ // 使い方:[wpurl] add_shortcode('wpurl', 'sh_wpurl'); function sh_wpurl() { return get_bloginfo('wpurl'); } // テンプレートディレクトリ // 使い方:[template_dir] add_shortcode('template_dir', 'sh_template_dir'); function sh_template_dir() { return get_template_directory_uri(); } // アップロードディレクトリ // 使い方:[upload_dir] add_shortcode('upload_dir', 'sh_upload_dir'); function sh_upload_dir() { $upload_dir = wp_upload_dir(); return $upload_dir['baseurl']; } // プラグインディレクトリ // 使い方:[plugin_dir] add_shortcode('plugin_dir', 'sh_plugin_dir'); function sh_plugin_dir() { return plugins_url(); } |
使い方はコード中のコメントに書いてます。
改めて見ると、全部パス取得系ですね。
固定ページなどをコーディングするときに絶対パスで指定してしまうと、本番公開のときに全部書き換えないといけなくなるので、手間だし間違いの元ですよね。
それを上のショートコードで書いておけばそのまま本番公開できます。
とりあえずこれを書いておけば、開発効率がグッと上がります。
コードの説明はとくに必要ないと思いますが、強いて説明するなら2番目のショートコード(サイトのURLパス(httpを削除))は、カスタムメニュー(外観>メニューのこと)のカスタムリンクを設定するときに使っています。
なぜかというと、カスタムリンクを設定すると勝手にスキーム「http://」の文字列が追加されるので、それを省いたパス部分のみを取得するためです。
その他便利なショートコード
任意の固定ページを呼び出す関数&ショートコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | /*------------------------------------------- 任意の固定ページを呼び出す関数&ショートコード ---------------------------------------------*/ function get_post_content( $page_path, $output=OBJECT, $post_type='page' ) { $get_page_by_path = get_page_by_path( $page_path, $output, $post_type ); if ( $get_page_by_path->post_status == 'publish' ) { return apply_filters( 'the_content', $get_page_by_path->post_content ); } else { return null; } } add_shortcode('get_post_content', 'sh_get_post_content'); function sh_get_post_content($atts) { extract( shortcode_atts( array( 'page_path' => 'page_path', 'output' => OBJECT, 'post_type' => 'page' ), $atts ) ); return get_post_content($page_path, $output, $post_type); } |
このショートコード使い方
このショートコードの一番簡単な使い方は、
[get_post_content page_path=”固定ページのスラッグ名”]
です。
パラメータは、get_page_by_pathと同じです。ですので、固定ページ以外にも使えます。
例えば、カスタム投稿タイプのページを呼び出したい場合は、
[get_post_content page_path=”カスタム投稿ページのスラッグ名” post_type=”カスタム投稿タイプ名”]
と言う感じで、パラメータを変えることで任意のページを呼び出すことができますので、とても便利です。
自分は、同じ情報を複数の箇所に書くのとかが嫌なので、使い回す情報は1ページにまとめておいて使ったりしています。
テンプレートを呼び出すショートコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /*------------------------------------------- テンプレートを呼び出すショートコード ---------------------------------------------*/ add_shortcode('get_template_part', 'sh_get_template_part'); function sh_get_template_part($atts) { extract( shortcode_atts( array( 'slug' => 'slug', 'name' => 'name' ), $atts ) ); ob_start(); get_template_part($slug, $name); return ob_get_clean(); } |
このショートコード使い方
このショートコードの使い方は、
[get_template_part slug=”テンプレートのスラッグ名” name=”テンプレートの名前”]
です。WordPress関数のget_template_partと同じですね。
固定ページなどからphpテンプレートを呼び出すことができるので、複雑な処理はphpのプログラミングで書いておいて、管理画面からは呼び出すだけにしておけばMVCとまでは言いませんが、役割を切り分けることができて、メンテナンス性が上がります。
投稿以外の場所でもショートコードを使えるようにする
テキストウィジェットやカスタムメニューでショートコードが使えたらなお便利ですよね。
以下のコードを書いておけば、使えるようになります。
1 2 3 4 5 6 7 8 9 10 | /*------------------------------------------- 各所でショートコードを使えるようにする -------------------------------------------*/ // テキストウィジェットでショートコードを使用する add_filter('widget_text', 'do_shortcode'); // カスタムメニューでショートコードを使用する add_filter('wp_nav_menu', 'do_menu_shortcodes'); function do_menu_shortcodes( $menu ){ return do_shortcode( $menu ); } |