■目次
導入カスタマイズ(基本)カスタマイズ(機能追加)多言語対応(Multisite Language Switcher)多言語対応(Bogo)トラブル
■導入
■ダウンロード 公式サイトからダウンロードできる https://ja.wordpress.org/ 旧バージョンは以下からダウンロードできる https://ja.wordpress.org/releases/ ■インストール 少し前のバージョンをインストールしても、インストール時に最新版に更新される WordPress(ワードプレス)をインストールする方法【初心者向け】 | TechAcademyマガジン https://techacademy.jp/magazine/1354 WordPress(ワードプレス)の使い方 / ホームページ・ブログ作成 / マニュアル - レンタルサーバーならロリポップ! https://lolipop.jp/manual/hp/wordpress-lecture/ WordPress(ワードプレス)とテーマ・プラグインの更新 / ホームページ・ブログ作成 / マニュアル - レンタルサーバーならロリポップ! https://lolipop.jp/manual/blog/wordpress-update/ ■バージョン確認 管理画面のダッシュボードで確認する コードレベルで確認する場合、wp-includes/version.php で確認できる 今使っているWordPressのバージョンを調べる方法 - キーワードノート https://kw-note.com/cms/get-wordpress-version/ ■バージョンアップ 管理画面の「更新」メニューからバージョンアップできる FTP情報を求められる場合、以下を参考にする Wordpressの更新で、FTP経由のアップデートを回避する方法 - Qiita https://qiita.com/pugiemonn/items/c3f9bca255082a085b6c WordPress更新時にFTP情報入力画面が表示される場合の対処方法3つ | sand a lot Web & Music Create [札幌] https://www.sandalot.com/wordpress%E6%9B%B4%E6%96%B0%E3%81%A7ftp%E5%85%A5%E5%8A%9B%E7%94%BB%E9%9D%A2... 「FTP情報が必要」WordPressのプラグイン・本体の更新ができない | ホームページ制作 京都 ファンフェアファンファーレ http://funfairfanfare.com/ftp-wordpress-%E6%9B%B4%E6%96%B0%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84/ 【Wordpress】更新できない時はSSH SFTP Updater SupportでSFTP化しよう - マカラボ - Macalab - https://macalab.net/wordpress/ssh-sftp-updater-support/ 自動でのアップデートを停止させる場合、以下を参考にする WordPressの自動更新(アップデート)を停止する | PLUGMIZE(プラグマイズ) https://plugmize.jp/archives/blog/20160707_update.html ■gitでの管理 git.txt を参照 ■設置し直す場合 稼働しているWordPressから、以下をバックアップしておく(その他、必要なファイルがあれば合わせてバックアップする) .htaccess wp-config.php WordPressのファイルをアップロードし直し、バックアップした上記ファイルを追加アップロードする 以降は通常通り操作できる ■サブディレクトリに設置してルートディレクトリでアクセスする 例えば /wp/ ディレクトリ内にWordPressを設置した場合、アクセスするURLは http://example.com/wp/ のようになる /wp/ ディレクトリ内に置いたまま http://example.com/ でアクセスしたい場合、通常の手順でWordPress設置後に以下の設定を行う 管理画面の「設定 → 一般」 「サイトアドレス (URL)」から末尾の「/wp」を削除する(「WordPress アドレス (URL)」はそのままにする) /wp/index.php を /index.php に複製する(移動ではなく複製する) 複製された /index.php を開き
require( dirname( __FILE__ ) . '/wp-blog-header.php' );
この部分を以下のように変更する
require( dirname( __FILE__ ) . '/wp/wp-blog-header.php' );
この時点で /index.php からアクセスできるが、 この時点ではカスタム投稿タイプのページや下層ページがエラーになることがあるみたい 管理画面の「設定 → パーマリンク設定」 何も変更せずに「変更を保存」を押す。これにより設定が更新される ※/.htaccess は自動で作成されたが、環境によっては作成されないかも その場合、/wp/.htaccess を複製して /.htaccess を作成し、ファイル内のパスを調整する これで http://example.com/wp/ に設置したWordPressに対して http://example.com/ でアクセスできる 管理画面のURLは http://example.com/wp/wp-login.php になる ※本文内で直接URLを書いて下層ページにリンクしている箇所があれば、その部分は手動での調整が必要 ただしsearchreplacedb2などで一括置換すると、メディアのURLも置換してしまうと思われるので注意 記事数によっては地道に手動で置換するほうが安全か(要検証) WordPress を専用ディレクトリに配置する - WordPress Codex 日本語版 https://wpdocs.osdn.jp/WordPress_%E3%82%92%E5%B0%82%E7%94%A8%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%... WordPressをドメイン直下のルートディレクトリへ移動する方法! | Cloud 9 Works https://www.cloud9works.net/web/how-to-change-wordpress-directory/ サブディレクトリ(/wp/)にインストールしたwordpressをドメイン直下に表示する方法【ルートディレクトリを変更】 | かわたま.net http://kawatama.net/web/974 「原則として /wp/ ディレクトリ内のみで構築し、本番公開時に /wp/index.php を /index.php に移す」 「プログラム自体は /wp/ に置いたままにしておく」 とすると 「トップに現行サイトがあっても構築を進められる」 「WordPressと色々なプログラムを併用する場合、ディレクトリが明確に分かれて管理しやすい」 となっていいかも。強引な手法ではなく公式に紹介されている手順なので、安心感もある (index.php など一部を除いてプレフィックス wp- が付いているので、デフォルトのままでも混乱は無さそうだが) ■データの移行 searchreplacedb2 を使って、データベース内のURLを置換できる 直接書き換えるのは、データが壊れる可能性があるため非推奨 【決定版】WordPressの引っ越し!サーバー移行・移転手順 | FASTCODING BLOG https://fastcoding.jp/blog/all/system/moving-wordpress/ WordPress移行時にURLをSQLで直接一括置換はダメ! 「Search and Replace for WordPress Databases Script」を使おう | infoScoop開発者ブログ https://www.infoscoop.org/blogjp/2014/08/14/use-search-and-replace-for-wordpress-when-moving/ WordPressでは一部のデータをシリアライズして保持しているが、シリアライズされたデータは以下のようになる 「13」という数値は「administrator」の文字数。このように文字の長さを保持している箇所がある 不用意にURLを書き換えるとデータの長さが変わり、正しく参照できなくなる可能性がある
a:1:{s:13:"administrator";b:1;}
■RSSの配信 例えば http://example.com/ にWordPressを設置した場合、 http://example.com/feed/ にアクセスするとRSSを取得できる また、カテゴリのスラッグなどから絞り込んで取得することもできる 以下、スラッグ「pickup」と「column」を取得する例 http://example.com/category/pickup/feed/ http://example.com/category/column/feed/ WordPressのカテゴリー別RSS Feedは簡単だった http://blog.eb-de.com/2010/09/19/wp-category-rss/ ■続きを読む 標準機能で「続きを読む」を表示する機能がある テーマ内では、以下の命令を使えばそれぞれの内容を取得できる
// 記事の全文を取得 the_content(); // 記事の後半のみを取得 the_content('', true); // 記事の前半のみを取得 global $more; // グローバル変数 $more を宣言(ループの前に) $more = 0; // more タグまでのみを表示するようにセット(ループの中で) the_content('');
「続きを読む」を使ってトップページに記事が表示された時に本文の一部だけを表示する - WordPressの使い方 https://www.adminweb.jp/wordpress/editor/index5.html テンプレートタグ/the content - WordPress Codex 日本語版 https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/the_... 「続きを読む」のカスタマイズ - WordPress Codex 日本語版 https://wpdocs.osdn.jp/%E3%80%8C%E7%B6%9A%E3%81%8D%E3%82%92%E8%AA%AD%E3%82%80%E3%80%8D%E3%81%AE%E3%8... ■ピックアップ記事 専用のプラグインを使わなくても、以下の方法で何とかなりそう 【WordPress】5分でブログのホームにピックアップ記事を表示させる方法 | たむらんち http://www.tamura.tottori.jp/2015/10/02/wordpress-easy-pickup-post/ ■その他メモ Webクリエイターボックス | WebデザインやWebサイト制作、最新のWeb業界情報などを紹介していくサイト。 https://www.webcreatorbox.com/ ねんでぶろぐ https://nendeb.com/
■カスタマイズ(基本)
■コーディング規約 WordPress コーディング規約 - WordPress Codex 日本語版 https://wpdocs.osdn.jp/WordPress_%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E8%A6%8F%E7%... ■雛形用のシンプルなテーマ 以下などのテーマを導入して雛形とし、カスタマイズするといい テーマが入ったディレクトリを /wp-content/themes 内にアップロードするだけで認識される (管理画面から直接インストールするなど、他の方法でのインストールも可) SoSimple - Free WordPress Themes https://wordpress.org/themes/sosimple/ インストールすると、テーマ管理画面に「Good Day, this is the SoSimple theme creator fervillz.」のようなメッセージが表示される これは /wp-content/themes/sosimple/functions.php の215行目あたりにある、以下の部分をコメントアウトすると非表示にできる
add_action( 'admin_notices', 'sosimple_admin_notice__success' );
カスタマイズ前に、案件に合わせた名前に変更しておくといい /wp-content/themes/sosimple のディレクトリ名を変更し、 /wp-content/themes/sosimple/style.css 内にあるテーマ情報も変更する 最低限これだけで大丈夫だが、テーマ内に「@package SoSimple」などが書かれているので、必要に応じて調整する ■子テーマ あるテーマをベースとし、独自に機能を拡張する仕組み テーマを直接カスタマイズすると、自動更新の際にカスタマイズ内容がリセットされてしまう可能性がある 子テーマを使えば、親となるテーマが自動更新されても独自の拡張内容が消えない 子テーマを作ってWordPressの既存テーマをカスタマイズする方法 | Webクリエイターボックス https://www.webcreatorbox.com/tech/wordpress-child-theme ■一から子テーマを作成する 自作テーマのディレクトリ名が公式テーマのディレクトリ名と偶然重複すると、自作テーマが自動更新の対象にされてしまう つまり、突然テーマが上書き削除される可能性がある これを防ぐために、常に子テーマ化しておくという手はある (とは言え、子テーマは親テーマの影響を受けるため、自動更新による変更を完全に防げるわけではない 既存のテーマと重複しないディレクトリ名を付けるくらいで十分かも) 最低限、親テーマとして以下のファイルを作成し、 /wp-content/themes/sample/index.php
<?php
/wp-content/themes/sample/style.css
/* Theme Name: Sample Author: refirio Author URI: http://refirio.net/ Description: Simple theme for simple websites. Version: 1.0.0 */
子テーマとして以下のファイルを作成すれば機能する あとは子テーマの内容のみを編集していく /wp-content/themes/sample-child/functions.php
<?php add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' ); function theme_enqueue_styles() { wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' ); wp_enqueue_style( 'child-style', get_stylesheet_directory_uri() . '/style.css', array('parent-style')); }
/wp-content/themes/sample-child/style.css
/* Theme Name: Sample Child Template: sample Author: refirio Author URI: http://refirio.net/ Description: Simple theme for simple websites. Version: 1.0.0 */
子テーマを作成する際、カレントディレクトリの扱いが変わるので注意 「get_template_directory」があれば「get_stylesheet_directory」に置換することにより、最低限動作するはず WordPress 子テーマがカレントのときのテンプレートディレクトリの取得 - MT Systems http://web.mt-systems.jp/archives/703 ■トップページを作成する 「設定 → 表示設定 → ホームページの表示」 から、特定の固定ページをトップページとして表示できる WordPressで固定ページをトップページに指定する方法 https://wp-exp.com/blog/page-top/ もしくは home.php を作ると、トップページ用のファイルとして扱われる ざっくりWordPressの自作テンプレートの作り方 - Qiita https://qiita.com/kazukichi/items/5126a4fd259d374e99ae テンプレート階層 - WordPress Codex 日本語版 https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E9%9A%8E%E5%B1%A4#.E3.... ■固定ページに投稿一覧を表示する 固定ページで投稿の一覧表示の実装【初心者のためのWORDPRESS -07-】 | クラウドット株式会社 https://www.cloudot.co.jp/blog/2444/ 固定ページに投稿記事一覧を表示する【Wordpressテンプレートタグ】 | arutega | アルテガ https://arutega.jp/wordpress-tips01/ ■固定ページごとのテンプレートを用意する 例えば http://example.com/ にWordPressを設置しているとして http://example.com/sample/ というページを作成した場合、 テーマとして page-sample.php を作成するとページ専用テンプレートとして扱われる 基本的にはこの方法で固定ページを作成していけばいいが、コンテンツはできるだけWordPressのエディタで編集できるようにする方が管理しやすい (PHP側にコンテンツを記述すると、更新にFTPが必要になってしまう ただしWordPressのエディタ側でコンテンツを記述すると、git管理できないので一長一短 後者でプログラムを扱いたい場合、ショートコードの結果を埋め込むようにすればいい) また、例えば page-contact.php を作成して以下の内容を記述する
<?php /* Template Name: お問合わせページ */ ?>
そうすると、ページ作成の際に「固定ページの属性」の「テンプレート」からこのファイルを選択できるようになる 汎用的なページテンプレートを作成する場合、この方法が利用できる 固定ページのテンプレートを変更する方法【WordPress】 https://webnetamemo.com/coding/wordpress/20150628397 テンプレート階層 - WordPress Codex 日本語版 https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E9%9A%8E%E5%B1%A4#.E5.... 以下は固定ページとしてHTML込みで投稿する場合の、汎用的なテーマの例(page.php)
<?php get_header(); ?> <?php while ( have_posts() ) : the_post(); ?> <?php remove_filter( 'the_content', 'wpautop' ); ?> <?php the_content(); ?> <?php if ( comments_open() || get_comments_number() ) : ?> <section class="column"> <div class="inner"> <?php comments_template(); ?> </div><!-- /.inner --> </section> <?php endif ?> <?php endwhile; ?> <?php /* get_sidebar(); */ ?> <?php get_footer(); ?>
■記事ごとのテンプレートを用意する 例えば single-shop-test.php を作成して以下の内容を記述する
<?php /* Template Name: テスト記事 Template Post Type: post,news */ ?>
そうすると、記事作成の際に「投稿の属性」の「テンプレート」からこのファイルを選択できるようになる 投稿ページのテンプレートを変更する方法【WordPress】 https://webnetamemo.com/coding/wordpress/201712026347 ■自動挿入されるpタグを削除する このようにして本文を表示している箇所を
<?php the_content(); ?>
以下のように変更する(「remove_filter」を追加する)
<?php remove_filter( 'the_content', 'wpautop' ); ?> <?php the_content(); ?>
wordpressに自動挿入されるPタグを削除する3つの方法 http://hikarika.jp/ptagusakujo/ ■ビジュアルエディタを無効にする HTML込みで固定ページを作成させる場合など、ビジュアルエディタは無効にしておく方が無難 有効に切り替えて投稿すると、必要なHTMLタグが削除されてしまう可能性がある 特定の投稿タイプのみ、ビジュアルエディタを無効にすることもできる WordPressの記事編集時にビジュアルエディタを使えないようにする方法 | TechMemo http://techmemo.biz/wordpress/disable-visual-editor/ ■リビジョンを有効にする デフォルト状態で有効になっているはず 公開ボタン部分に表示されない場合は何度か投稿してみる(1度だけの投稿だと表示されない) 「表示オプション」にある「リビジョン」にチェックを入れると、詳細な履歴が表示されるようになる ■ショートコード 投稿・固定ページ・テーマで、特定の文字列を書くことで特定の内容を挿入できる この仕組をショートコードと呼ぶが、これは自分で追加することができる (プログラムは functions.php に閉じ込め、原則としてテーマからはショートコードを呼ぶ…とすると場合によってはメンテナンスしやすいかも) WordPressのURLをショートコードにしておく - y.o.designers-works http://yuji-okayama-designersworks.com/wordpress/871/ functions.php に、一例だが以下の内容を記述する
/** * ホームのURLを取得(ショートコード) */ function shortcode_home_url() { return home_url( '/' ); } add_shortcode( 'home_url', 'shortcode_home_url' ); /** * テーマのURLを取得(ショートコード) */ function shortcode_theme_url() { return get_template_directory_uri() . '/'; } add_shortcode( 'theme_url', 'shortcode_theme_url' ); /** * 投稿一覧を取得(ショートコード) */ function shortcode_post_list() { $paged = get_query_var('paged'); $args = array( 'posts_per_page' => 5, 'paged' => $paged, 'orderby' => 'post_date', 'order' => 'DESC', 'post_type' => 'post', 'post_status' => 'publish' ); $the_query = new WP_Query($args); ob_start(); if ( $the_query->have_posts() ) { while ( $the_query->have_posts() ) { $the_query->the_post(); ?> <li class="hover"> <a href="<?php the_permalink() ?>" class="hover100"> <div class="img_box"> <?php the_post_thumbnail( 'thumbnail' ); ?> </div> <div class="text_box"> <div class="entry_info_box"> <span class="entry-date"><?php the_time( 'Y.m.d' ); ?></span> <span class="entry-title"><?php the_title(); ?></span> </div> <div class="entry_content_box"> <?php echo strip_tags( mb_substr( get_the_content(), 0, 30 ) ); ?> </div> </div> </a></li> <?php } } wp_reset_postdata(); $contents = ob_get_contents(); ob_end_clean(); return $contents; } add_shortcode( 'post_list', 'shortcode_post_list' );
投稿内では、以下のコードで呼び出すことができる [home_url] ... ホームのURLを取得 [theme_url] ... テーマのURLを取得 [post_list] ... 投稿一覧を取得 テーマ内では、以下のコードで呼び出すことができる <?php echo do_shortcode( '[home_url]' ); ?> ... ホームのURLを取得 <?php echo do_shortcode( '[theme_url]' ); ?> ... テーマのURLを取得 <?php echo do_shortcode( '[post_list]' ); ?> ... 投稿一覧を取得 ■カスタム投稿タイプ 異なるタイプのコンテンツを管理できる function.php にコードを追加することで設定できる。以下は追加例
/** * カスタム投稿タイプ */ function create_post_type() { // コラム register_post_type( 'column', array( 'labels' => array( // ラベル 'name' => 'コラム', 'singular_name' => 'コラム', 'add_new' => '新規追加', 'add_new_item' => '新規コラムを追加', 'edit_item' => 'コラムの編集', 'new_item' => '新規コラムを追加', 'search_items' => 'コラムを検索', 'view_item' => 'コラムを表示', ), 'public' => true, // 投稿タイプをパブリックにするか 'has_archive' => true, // アーカイブを有効にするか 'supports' => array( 'title', // 記事タイトル 'editor', // 記事本文 'comments', // コメント 'thumbnail' // サムネイル ), 'menu_icon' => 'dashicons-edit', // メニューアイコン 'publicly_queryable' => true, 'rewrite' => true, ) ); add_post_type_support( 'column', 'revisions' ); // リビジョンに対応させる場合 // コラムカテゴリー register_taxonomy( 'column-cat', array( 'column' ), array( 'label' => 'カテゴリー', //表示名 'show_ui' => true, //管理画面に表示するか 'show_admin_column' => true, //管理画面の一覧に表示するか 'show_in_nav_menus' => true, //カスタムメニューの作成画面で表示するか 'hierarchical' => true, //階層構造を持たせるか(持たせるとカテゴリー扱い) ) ); } add_action( 'init', 'create_post_type' );
https://qiita.com/kazukichi/items/5126a4fd259d374e99ae の内容を参考に、項目やコメントを追加したい 上のように作成したカスタム投稿タイプの記事を表示する場合、 archive.php single.php を複製して archive-column.php single-column.php を作成する。「column」には register_post_type の第一引数で渡したものを指定する 作成したファイルが認識されない場合、いったん別のテーマに切り替えてから再度戻すと認識されることがある カスタム投稿タイプのカテゴリは、タクソノミーを使って作られている。よってカテゴリでの検索結果は taxonomy.php を作成する。タクソノミー用のテンプレートを作成して…という流れになる taxonomy-xxx.php のようなファイル名で、タクソノミーごとにテンプレートを作成することもできるみたい(要検証) http://www.example.com/wordpress/ にWordPressを設置した場合、カスタム投稿タイプのURLは以下のようになる http://www.example.com/wordpress/column/ http://www.example.com/wordpress/column/%E3%83%86%E3%82%B9%E3%83%88/ Wordpress カスタム投稿タイプの作り方 - Qiita https://qiita.com/nagasawaaaa/items/9501c0a2e544d85ee78d WordPressのカスタム投稿タイプでメンバー紹介ページを作成 | Webクリエイターボックス https://www.webcreatorbox.com/tech/custom-post-type Function Reference/register post type - WordPress Codex https://codex.wordpress.org/Function_Reference/register_post_type タクソノミーテンプレート - WordPress Codex 日本語版 https://wpdocs.osdn.jp/%E3%82%BF%E3%82%AF%E3%82%BD%E3%83%8E%E3%83%9F%E3%83%BC%E3%83%86%E3%83%B3%E3%8... ■カスタム投稿タイプのURLを変更 カスタム投稿タイプのURLを変更する場合、Custom Post Type Permalinks プラグインを使うといい …らしいが、導入しても何故かURLが変わらなかった? カテゴリ一覧とタグ一覧ページ以外のURLはおかしなものではないので、導入しなくても大丈夫かも カスタム投稿タイプのパーマリンクをカスタム設定できるWordPressプラグイン・Custom Post Type Permalinks | かちびと.net http://kachibito.net/wordpress/plugin/custom-post-type-permalinks.html Custom Post Type Permalinksを使ってみる | cly7796.net http://cly7796.net/wp/cms/try-using-custom-post-type-permalinks/ ■カスタム投稿タイプでリビジョンを有効にする カスタム投稿タイプは、標準ではリビジョンが無効になっている 明示的に有効にする必要がある カスタム投稿でリビジョンを使えるようにする | Koeda Blog https://ko-e-da.com/131 ■記事一覧を取得する 一例だが、以下のコードで投稿一覧を取得できる
<ul> <?php $paged = get_query_var('paged'); $args = array( 'posts_per_page' => 5, 'paged' => $paged, 'orderby' => 'post_date', 'order' => 'DESC', 'post_type' => 'post', 'post_status' => 'publish' ); $the_query = new WP_Query($args); if ( $the_query->have_posts() ) { while ( $the_query->have_posts() ) { $the_query->the_post(); ?> <li><a href="<?php the_permalink() ?>"> <?php the_time( 'Y.m.d' ); ?> ... <?php the_title(); ?> </a></li> <?php } } wp_reset_postdata(); ?> </ul>
例えば 「'post_type' => 'post',」 の部分を 「'post_type' => 'column',」 とすると、カスタム投稿タイプが「column」の記事を取得できる ■カテゴリ一覧を取得する WordPressの『get_categories』でカテゴリーリストを自由にカスタマイズする | Web技術Tips | ホームページ制作のDOE【横浜】 〜手を抜かず最大のパフォーマンス〜 https://www.doe.co.jp/hp-tips/wordpress/get_categories%E3%81%A7%E3%83%AA%E3%82%B9%E3%83%88%E3%82%92%... ■カスタム投稿タイプのカテゴリ一覧(タクソノミー一覧)を取得する 一例だが以下のようにすると、「column-cat」の一覧を取得できる
<?php $categories = get_terms( 'column-cat', 'hide_empty=0' ); ?> <ul> <?php foreach ($categories as $category) : ?> <li><a href="<?php echo do_shortcode( '[home_url]' ); ?>/column-cat/<?php echo $category->slug ?>/"><?php echo $category->name ?></a></li> <?php endforeach; ?> </ul>
■カテゴリの並び替え 標準機能では並び替えできないので、Category Order and Taxonomy Terms Order プラグインを使う カテゴリーの表示順を並び替えるプラグイン - WordPress超初心者講座 https://wp-exp.com/blog/category-order/ Category Order and Taxonomy Terms Order - WordPress プラグイン https://ja.wordpress.org/plugins/taxonomy-terms-order/ ■日時をフォーマットして表示 the_date() は、同じ日に複数の記事がある場合は一度しか出力されないことに注意 the_time() だと毎回表示してくれる 引数としてフォーマットを渡すことができるが、 原則として「the_time( get_option( 'date_format' ) );」という指定にし、WordPressの設定を反映させる方がいいかも テンプレートタグ/the date - WordPress Codex 日本語版 https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/the_... テンプレートタグ/the time - WordPress Codex 日本語版 https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/the_... WordPressでthe_dateタグは同日だと表示されない | 株式会社LIG https://liginc.co.jp/designer/archives/2266 ■アイキャッチ画像を表示 新着情報にサムネイルを表示したい…のような場合に使える WordPressのアイキャッチ画像の設定方法 | Web’Notes http://webnonotes.com/wordpress/eyecatch/ ■入力項目の追加 カスタムフィールドで値を追加できる Advanced Custom Fields を使えば、専用画面で項目を管理できる Pro版なら、繰り返しフィールドに対応していたりと、より高機能になっている 初心者必見!WordPressで便利なカスタムフィールドとは?設定する手順とプラグインもまとめて紹介|ferret [フェレット] https://ferret-plus.com/8047 Advanced Custom Fieldsの使い方ープラグイン | TechAcademyマガジン https://techacademy.jp/magazine/7640 Advanced Custom Fieldsを更に使いやすく!ACF Proを選ぶ理由と機能紹介 | KERENOR { ケレンオール } http://www.kerenor.jp/acf-pro-introduction/ 無料版Advanced Custom Fieldsから有料版ACF Proへアップグレード/インストールする方法 | KERENOR { ケレンオール } http://www.kerenor.jp/upgrade-to-acf-pro/ カスタムフィールドとして追加した値は、テーマ側に以下のようなコードを追加すれば表示できる
<?php echo get_field( 'test1' ); ?> <?php echo get_field( 'test2' ); ?>
Advanced Custom Fieldsの出力 http://kotori-blog.com/wordpress/acf_output/ ■フックで処理を制御する ※要検証 WordPressではフックを使うことにより、特定のタイミングで処理を行わせることができる 本体やプラグインを改造する前に、アクションフックで対応できないか考える WordPressのフック、アクションフック、フィルターフックとは? - WPJ https://www.webprofessional.jp/wordpress-hook-system/ WordPressにおけるフック処理の仕組みとは? http://nanoappli.com/blog/archives/7594 プラグイン API/アクションフック一覧 - WordPress Codex 日本語版 https://wpdocs.osdn.jp/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3_API/%E3%82%A2%E3%82%AF%E3%82%B7... ■titleタグについて 現在は wp_title() でtitleタグの内容を出力するのは、非推奨になっているので注意 (タイトルが二重に出力される可能性がある) WordPress 4.4 から wp_title関数が 非推奨になりました - ねんでぶろぐ https://nendeb.com/313 ■パスを「http」始まりではなく「/」はじまりにする テーマの functions.php に以下を記述する
class relative_URI { function relative_URI() { add_action('get_header', array(&$this, 'get_header'), 1); add_action('wp_footer', array(&$this, 'wp_footer'), 99999); } function replace_relative_URI($content) { $home_url = trailingslashit(get_home_url('/')); return str_replace($home_url, '/~wordpress/', $content); } function get_header() { ob_start(array(&$this, 'replace_relative_URI')); } function wp_footer() { ob_end_flush(); } } new relative_URI();
【WordPress】出力されるリンクURLを絶対パスからルート相対パスに変更する方法 | WordPress | マイホームブログ | Web屋の芝生DIY https://web-diy.jp/2016/10/161014_01/ ■管理画面のURLを変更する ログインページを変える:WordPress私的マニュアル https://elearn.jp/wpman/column/c20121118_01.html ■管理画面のメニューを整理する プラグインで管理画面のメニューを簡単整理!「Admin Menu Editor」がお手軽でおすすめ(WordPress) http://room9.jp/2014/02/26/080000/ ■管理画面のメニューにある「投稿」の表記を変更する 管理画面の「投稿」のラベルを変更する | WordPressカスタマイズ事典 http://wpcj.net/1171 ■同一LAN内の他端末からアクセスする スマートフォンから直接手元のPCにアクセスしようとしても、WordPressを http://localhost/wordpress/ のURLでセットアップしていると http://192.168.1.25/wordpress/ にアクセスしても http://localhost/wordpress/ にリダイレクトされてしまう(他端末からはアクセスできない) この場合「http://192.168.1.25」を前提としてWordPressを設置しなおせばアクセスできるが、以下のようにするだけでもアクセスできる wp-config.php
define('WP_HOME','http://192.168.1.25/wordpress'); define('WP_SITEURL','http://192.168.1.25/wordpress');
この設定があると、本来のURLよりも優先して認識してくれる ただし、マルチサイトで構築したサイトだと正しく反映されないことがあるかも?要調査 ローカル環境にコピーしたWordPressが本家にリダイレクトされる時の対処法 | TechMemo http://techmemo.biz/wordpress/redirect-local-xampp/ ■WordPress外からWordPressのデータを参照する 普通のPHPファイルで wp-load.php を読み込むと、WordPressの命令を使用できるようになる 例えば以下のようにすると、WordPressの記事を10件一覧表示できる
<?php require_once '/path/to/wp-load.php'; $posts = get_posts('numberposts=10'); ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>記事一覧</title> </head> <body> <h1>記事一覧</h1> <ul> <?php if ($posts): foreach($posts as $post): setup_postdata($post); ?> <li><a href="<?php the_permalink();?>"> <?php the_title(); ?></a></li> <?php endforeach; endif ?> </ul> </body> </html>
例えば以下のようにすると、ヘッダやフッタも含めて表示できる
<?php require_once '/path/to/wp-load.php'; $posts = get_posts('numberposts=10'); ?> <?php get_header() ?> <div id="primary" class="content-area"> <main id="main" class="site-main" role="main"> <h1>記事一覧</h1> <ul> <?php if ($posts): foreach($posts as $post): setup_postdata($post); ?> <li><a href="<?php the_permalink();?>"> <?php the_title(); ?></a></li> <?php endforeach; endif ?> </ul> </main><!-- .site-main --> </div><!-- .content-area --> <?php get_sidebar() ?> <?php get_footer() ?>
■WordPressからAPIでデータを取得する REST APIとしてデータを取得できるらしい(要検証) WP REST APIでの記事の取得と表示[PHP版 / JS版] | koukiTips http://koukitips.net/post1790/ ■WordPressのユーザーに権限を追加・削除する WordPressのユーザーに権限を追加・削除する方法 https://labe.jp/blog/webcreation/wordpress/use-authority/ ユーザーの種類と権限 - WordPress Codex 日本語版 https://wpdocs.osdn.jp/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E7%A8%AE%E9%A1%9E%E3%81%A8%E6%A... 例えば以下のようにすると、「購読者」ユーザでも非公開記事にアクセスできるようになる いったん add_cap や remove_cap で権限を追加すると、削除するまでその状態が維持されている 命令を実行すると、その状態がデータベースに記録されているみたい
function allow_subscriber_read_private_posts() { $subscriber = get_role( 'subscriber' ); $subscriber->add_cap( 'read_private_posts' ); //$subscriber->remove_cap( 'read_private_posts' ); } add_action( 'init', 'allow_subscriber_read_private_posts' );
■WordPressからWordPress外のセッションを参照する WordPressはセッションの保存先をPHPの初期設定に従わず、別の場所に保存するらしい(要検証) 一例だが function.php に以下の記述をすることで、他のプログラムとセッションを共有できる つまり、他のプログラムでセットしたセッションの内容を、WordPressから参照できる
function wp_session() { session_save_path('C:/xampp/tmp'); session_set_cookie_params(0, '/~wordpress'); session_cache_limiter('none'); session_start(); } add_action('init', 'wp_session');
うまく反映されなければ、すでに以前のパスでCookieが保存されている可能性がある Chromeなら開発者ツールを開いて「Application → Cookies」から、Cookieをクリアする ローカル開発環境なら、「http://localhost」を右クリックして「Clear」とし、ページを再読込すればいい PHP - WordPressとCakePHPのSESSION変数連携(87598)|teratail https://teratail.com/questions/87598 ■マルチサイト WordPressマルチサイトのメリット・デメリット・設定方法 | 株式会社ベクトル | 名古屋でWordPressを活用したウェブ制作・システム開発 https://www.vektor-inc.co.jp/post/wordpress-multi/ 【決定版】WordPressをマルチサイト化する時のつまずきポイント全て解決!! - いーもんみつけたぞいや ー楽しむ子育てとガジェット情報ー http://info2info.net/blog/2017/03/10/wordpress001/ 【WordPress】マルチサイトでのテーマの認識。 | studio a.m. http://studio-a-m.net/%E3%80%90wordpress%E3%80%91%E3%83%9E%E3%83%AB%E3%83%81%E3%82%B5%E3%82%A4%E3%83... マルチサイトをサブドメイン形式で使うには、以下の制限があるので注意 ・「localhost」では使えないので、ローカルテスト用にドメインの設定が必要 ・サブディレクトリには設置できない ■脆弱性の診断 ※未検証 wpscan環境をWin10 proで手っ取り早く作り、Wordpressサイトの脆弱性をスキャンしてみる - Qiita https://qiita.com/9steps/items/7860243a86ce6745702c
■カスタマイズ(機能追加)
■フォームメールを設置する プラグインで対応できる Contact Form 7 が一番有名だが、そのままではプレビュー画面を表示できない 仕事で使うなら MW WP Form が柔軟でいいかも MW WP Form - 柔軟なカスタマイズ性が魅力の WordPress 問い合わせフォームプラグイン MW WP Form 公式マニュアル https://plugins.2inc.org/mw-wp-form/ MW WP Formを使った問合せフォームの作り方 | New Standard http://newstd.net/wordpress/1829 MW WP Form のセレクトボックスで「選択してください」を空欄とみなす最も簡単な方法(JavaScript 非使用) | フロントエンドエンジニアのblog | 有限会社Willさんいん https://www.will3in.co.jp/blog/article/select-as-blank-in-mw-wp-form/ ■会員サイトを作成する WP-Members のみ試した 日本語化など初期設定にそこそこ手間がかかりそうな感じだが、定番プラグインみたいなので解説が多くて何とかなりそう 「登録完了時に◯◯の処理をする」のような改造をしたい場合、 /wp-content/plugins/wp-members/inc/register.php を改造すれば何とかなりそう ただし改造するとプラグインをアップデートできなくなるので、do_action() などアクションフックで何とかしたいところ WordPressで会員サイトを簡単に作成できるプラグイン10選|ferret [フェレット] https://ferret-plus.com/8807 WordPressで会員サイトが構築できるプラグイン「WP-Members」 | Spider Webs https://spiderwebs.tokyo/wp-members/ 【Plugin】会員登録・ユーザー情報編集機能などを備えた「WP-Members」 http://www.hiskip.com/wp/plugin/site-manage/membership/2362.html ■記事を複製する Duplicate Postの使い方と設定方法|記事を複製できるプラグイン https://nakaeshogo.com/duplicate-post/ ■Instagramを表示する InstagramのフィードをWordPressに表示させるプラグイン「Instagram Feed」の設定方法 | 内藤勲ブログ https://naitoisao.com/23832/ Instagram フィード - WordPress プラグイン https://ja.wordpress.org/plugins/instagram-feed/ ■使用プラグイン例 某保険会社サイトの構築で使用したプラグイン。参考程度に (インポート&エクスポート系のプラグインを複数入れているが、「使えなければ他のものを試す」と作業できるようにしたため) admin-menu-editor ... Admin Menu Editor advanced-custom-fields-pro ... Advanced Custom Fields PRO(有料プラグイン) akismet ... Akismet Anti-Spam all-in-one-seo-pack ... All In One SEO Pack csv-post-manager ... CSV投稿マネージャー(有料プラグイン) custom-post-type-permalinks ... Custom Post Type Permalinks duplicate-post ... Duplicate Post google-sitemap-generator ... Google XML Sitemaps instant-comment-validation ... Instant Comment Validation(無効化されていた) mw-wp-form ... MW WP Form(確認画面が不要なら Contact Form 7 が定番) ps-auto-sitemap ... PS Auto Sitemap ps-taxonomy-expander ... PS Taxonomy Expander really-simple-csv-importer ... Really Simple CSV Importer search-regex ... Search Regex simple-301-redirects ... Simple 301 Redirects wp-all-export ... WP All Export wp-all-import ... WP All Import wp-comment-fields ... WP Comments Fields Manager(無効化されていた) wp-csv-exporter ... WP CSV Exporter wp-multibyte-patch ... WP Multibyte Patch wp-user-avatar ... WP User Avatar
■多言語対応(Multisite Language Switcher)
※未整理 ■概要 以下のページに 「まずBogoやWPMLを止めた理由ですが、Bogoのような1言語1記事方式のプラグインはサイト内検索のプログラムを複雑化したためです。」 と書かれているように、Bogoでも複雑化は避けられないかもしれない Multisite Language Switcher は最悪プラグインを外しても問題ないのは安心感がある http://japan3d.net/web/multisite_language_switcher/ 多言語のWordPressサイト構築方法【設計・プラグイン・設定方法】 https://manablog.org/wordpress-multilingual/ 【多言語サイト構築】簡単でプラグインに依存しない方法 | サイト制作覚書 http://japan3d.net/web/multisite_language_switcher/ 2015年 失敗しない! WordPress多言語サイト制作で 絶対に知っておきたいこと https://www.slideshare.net/katz515/howto-multilingual-wordpress-wck2015 wordpressのマルチサイトで【参加サイトに表示されない】理由は簡単なミス | サイト制作覚書 http://japan3d.net/web/multisite-setup/ ・マルチサイトを前提とする ・管理画面で「この日本語サイトのこの記事は、この英語サイトのこの記事と関連している」を登録する のみを行うプラグインみたい ■導入 https://ja.wordpress.org/plugins/multisite-language-switcher/ ダウンロード プラグインをアップロードして有効化 「設定 → マルチサイト言語スイッチャー」 「管理画面言語」を「Japanese」にして「設定」ボタンを押す 完了のはずだが、記事を投稿する画面に 「このプラグインの機能を使用するため、一つ以上のブログを他言語に定義することをお勧めします。」 と表示されている ↓不要かも↓ 「参加サイト → サイトネットワーク管理 → サイト」 英語化したいサイトの「ダッシュボード」をクリック 「設定 → 一般」 「サイトの言語」を「English (United States)」に変更して「変更を保存」ボタンを押す (その他の項目も、必要に応じて変更) ↑不要かも↑ 「参加サイト → サイトネットワーク管理 → サイト」 英語化したいサイトの「ダッシュボード」をクリック 「設定 → ユーザー → 新規登録」 メインサイトで登録済みのユーザと同じユーザ名とメールアドレスを登録する (ユーザ site-test1 が追加されていたが、メインサイトと同じ管理ユーザを登録する) …と思ったがエラーになった 「そのユーザー名は利用できません。このユーザー名はすでに使用されています !このメールアドレスはすでに使用されています !」 既存のユーザーを追加 から登録済みのユーザ名を入力して追加する 各ブログごとにプラグインを有効化する それでも 「このプラグインの機能を使用するため、一つ以上のブログを他言語に定義することをお勧めします。」 と表示されていたが、色々ページ遷移していたら何故か表示されるようになった…? 日本語記事、もしくは英語記事(どちらでも)の投稿編集画面にある 「マルチサイト言語スイッチャー」 で他の言語を選択できるので、選択して更新する ■追加設定 「外観 → ウィジェット」で「マルチサイト言語スイッチャー」を追加すると、サイドバーに言語切替リンクが表示される また、以下の方法で各記事に言語切替リンクを設置することもできる Multisite Language Switcherで複数言語の切り替えを『select option』で実装する方法。 https://manablog.org/multisite-language-switcher-select-option/
■多言語対応(Bogo)
※Bogoよりも、上に記載した Multisite Language Switcher の方がいいかも Bogoでの対応例 見かけのURLは、言語ごとのディレクトリに分割される 別のプラグインを使ったり、別々にWordPressを設置したり、マルチサイトを活用したり、など他にも色々な方法が考えられる Bogoを使ってWordpressを多言語化 - 株式会社クオックス|QOX Inc. https://qox.jp/blog/bogo-wordpress/ ■導入 Bogo - WordPress プラグイン https://ja.wordpress.org/plugins/bogo/ プラグインを導入して有効化する 管理画面メニューの「ツール」に「Bogo」が追加され…るらしいが昔のバージョンの話? 代わりに、管理画面メニューに「Languages」が追加された 「更新」にBogoの言語ファイルが現れた。更新するとメニューが「言語」になり、内容も翻訳された インストールが完了すると、管理画面の右上に言語切替のメニューが表示される 普通に日本語で記事を投稿する 投稿後に「翻訳を追加」から追加すると、その記事に紐付いた投稿が作成される タイトルをクリックすると、その記事の編集画面に移動するので、翻訳した内容に編集する http://localhost/wordpress/ で日本語の記事が表示され、 http://localhost/wordpress/en/ で英語の記事が表示される 記事内に言語切替リンクを組み込みたい場合、本文に「[bogo]」と書けば置換される ■カテゴリ Bogoを使ってWordpressを多言語化 - 株式会社クオックス|QOX Inc. https://qox.jp/blog/bogo-wordpress/ カテゴリは言語ごとにトップのカテゴリを作成し、その配下にそれぞれ作成するのが無難かも ■テーマ内で言語によって処理を分岐 Bogoを使ってWordpressを多言語化 - 株式会社クオックス|QOX Inc. https://qox.jp/blog/bogo-wordpress/
<?php if ( get_locale() == 'en_US' ) : ?> en <?php else : ?> ja <?php endif ?>
■カスタム投稿タイプに対応 標準では、通常の投稿と固定ページにのみ対応している 以下の方法で、カスタム投稿タイプにも対応できる WordPress Bogo をカスタム投稿タイプでも使う - Qiita https://qiita.com/gatespace/items/75e70f5ae162c2962dcc
/** * Support custom post type with bogo. * * @param array $localizable Supported post types. * @return array */ function my_localizable_post_types( $localizable ) { $args = array( 'public' => true, '_builtin' => false ); $custom_post_types = get_post_types( $args ); return array_merge( $localizable, $custom_post_types ); } add_filter( 'bogo_localizable_post_types', 'my_localizable_post_types', 10, 1 );
■サブドメインでの言語切替に対応 英語版は「/en/」に作られるなど、言語はサブディレクトリで切り分けられる サブドメインでの切り分けに対応できるか 要調査だが難しそう
■トラブル
■意図しないデータが取れる / 意図したデータが取れない ループが複数あると、そのような挙動になることがある。前のループの終わりで wp_reset_postdata() を呼び出すと解決することがある サクッと複数ループのコピペと解説|WordPressの使い方 https://wpno.jp/2017/06/5892/ WordPressの「wp_reset_postdata()」は具体的にどんな時に必要になるのかについて | たくおのーと https://takuo4649design.com/weblog/note/archives/13361 ■リダイレクトループ対策 リダイレクトループが発生した場合、wp-config.php に以下を書けば何とかなることがある
$_SERVER['HTTPS'] = 'on';
SSL対応後のWordpress管理画面で発生した無限リダイレクトループの修正方法 - Qiita https://qiita.com/hirror/items/bb96e236c3ffc41e890e ただし、「require_once(ABSPATH . 'wp-settings.php');」より後に書くと「このページにアクセスする権限がありません。」と言われ、 管理ページにログインできなくなるので注意 WordPress + HTTPS + リバースプロキシ = このページにアクセスする権限がありません。 - yohgaki's blog https://blog.ohgaki.net/wordpress-https-reverse-proxy-sorry-you-are-not-allowed-to-access-this-page AWSのELB配下でHTTPSリダイレクトさせる場合、以下が参考になる ELB配下のApacheで外部はHTTPSにリダイレクトし、内部のサーバのみHTTPで通信させる - Qiita https://qiita.com/wapa5pow/items/a5c4fc188e5da0ddde1d AWS EC2で常時SSLを実現する際の注意点 - Qiita https://qiita.com/michimani/items/88973c5e2ae76a8e84aa WordPressのSSL対応は、以下の記事も参考になりそう 「FORCE_SSL_ADMIN を使えば簡単にかつ強制的にできる」というだけで、これを使わずにサイトのURLを設定しても大丈夫かも(未検証) 管理画面での SSL 通信 - WordPress Codex 日本語版 http://wpdocs.osdn.jp/%E7%AE%A1%E7%90%86%E7%94%BB%E9%9D%A2%E3%81%A7%E3%81%AE_SSL_%E9%80%9A%E4%BF%A1
define('FORCE_SSL_ADMIN', true);
もしくは
define('FORCE_SSL_ADMIN', true); if ( ! empty( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' ) { $_SERVER['HTTPS']='on'; }
と設定することで対応できるみたい ■ページ送りができない ※アーカイブページで404エラーになる場合 ※未検証 アーカイブテンプレートでquery_postsを使ったらページ送りで嵌った!という話。 - Toro_Unit https://torounit.com/blog/2013/02/14/1470/ [Wordpress]pre_get_postsを使いこなす!pre_get_posts使い方まとめ | EMiAC-Works http://emiac-works.com/coding/pre-get-posts-code-snipet/ Top Level Categories Fixプラグイン | WordPressで企業ウェブサイト作成・商用ホームページ制作 WordPress Go Go http://wpgogo.com/development/top-level-cats-fix.html ■管理画面以外で英語表記になる ※無理矢理な対応なので非推奨 何故か「本番環境でのみ日本語表記にならない」ということがあったので調査 /wp-includes/l10n.php の560行目あたりを以下のようにすると日本語表記になった。でも他への影響が不明 プラグインの設定が悪さをしているみたい?
558: if ( true == $plugin_override ) { 559: // unset( $l10n_unloaded[ $domain ] ); 560: 561: // return true; 562: }
「設置した翻訳ファイルの読み込みを無効にする」という処理のコメントアウトなので、問題ない…はず 何かキャッシュの設定が悪さをしているとか?不明 以下に該当箇所のコード解説がある。参考までに WordPress 英語サイト作成時に翻訳ファイルが読み込めない https://tadtadya.com/wordpress-i-can-not-read-a-translation-file-when-creating-an-english-site/ ■管理画面からテーマファイルを編集できない 管理画面の「外観 → テーマの編集」からテーマを編集できるが、編集時にWordPressのバージョンによっては 「致命的なエラーをチェックするためにサイトと通信できないため、PHP の変更は取り消されました。」 というエラーが表示される。 WordPress4.9からテーマ編集の入力チェックが厳しくなっており、実質この機能は使えないみたい FTP経由で更新することが推奨される 【対処法】WordPress4.9でテーマの編集がエラーでできない時 https://nomadicwood.com/archives/5802 どうしても管理画面から編集したい場合、本体プログラムを調整することで対応できる /wp-admin/includes/file.php の492行目から599行目 以下の部分を丸ごとコメントアウトすると入力チェックを外すことができる
492: if ( $is_active && 'php' === $extension ) { 493: 494: $scrape_key = md5( rand() ); 495: $transient = 'scrape_key_' . $scrape_key; 496: $scrape_nonce = strval( rand() ); 497: set_transient( $transient, $scrape_nonce, 60 ); // It shouldn't take more than 60 seconds to make the two loopback requests. 〜略〜 597: return new WP_Error( 'php_error', $message, $result ); 598: } 599: }
【エラー修正】致命的なエラーをチェックするためにサイトと通信できないため、PHPの変更は取り消されました。 https://take-it-easy.tokyo/miscellaneous-notes/wordpress/correct_fatal_error