WordPressでタイトル入力を必須にする方法

今までまったく知らなかったのですがWordpressはタイトル、本文を入れなくても記事が公開できてしまうんです。

「タイトル入れないってどうゆうことだ!」と思ってしまうのですが、できてしまうものは仕方ないです。

タイトルを入れなくても公開できている

記事一覧では(タイトルなし)と表示される

※タイトル、本文両方入れない場合「投稿を公開しました」と表示されるが実際のページはない。

運用ルールで“タイトルは必ず入れる”とすればいいとは思うが、ついうっかりもあるかもしれないのでタイトルが入力されていない場合はアラートが出るようにします。
以下をfunctions.phpに追記します。

タイトルの有無をjQueryでチェックしてアラートを出しています。「タイトルを入力してください」の部分はアラートで表示する文字なので好きな文字に変更して使えます。

タイトルを入力しないで公開しようとするとアラートが表示される

これでタイトルを入力しないで公開しようとするとアラートが表示され記事は公開されません。

WordPressの検索結果を日付順にソートする

WordPressの検索結果って日付順で並んでいたと思うのだが、久しぶりに検索してみたらバラバラに並んでいた。Googleでいろいろ検索して調べたらどうもver3.7から関連度順(タイトルに検索語がマッチする投稿が優先される)に仕様が変更されたらしいです。
それでも全然かまわない、むしろ歓迎って場合もあるだろうけど、ニュースサイトのような使い方をしている場合、やはり日付順に並んで欲しい。

そこで昔のように検索結果を日付順にするためにfunction.phpに以下のコードを書きます。

これで検索結果が日付順に並びます。

[tmkm-amazon asin=’4797381078′][/tmkm-amazon]

WordPressの初期カテゴリー「未分類」を消す

WordPressをインストールするとカテゴリーに「未分類」が設定されています。WordPressでサイトを運用する上で、記事をカテゴリー「未分類」にすることはほとんどないと思うので、カテゴリー「未分類」消したいと思います。

管理画面からカテゴリーを開き、未分類にマウスを当てるとリンクが表示されるのですが「削除」がありません。

カテゴリー一覧

しかたがないので編集をクリックしてカテゴリー編集ページに入っても「削除」に準ずるボタンやリンクはありません。

試しにひとつカテゴリーを作ってみると、作ったカテゴリーには「削除」のリンクが現れます。

カテゴリー一覧

カテゴリー「未分類」は消せないわけではなく、設定でデフォルトカテゴリーになっているために消せなくなっているのです。なので、デフォルトカテゴリーを「未分類」以外に設定すればカテゴリー「未分類」を消すことができます。

1. デフォルトカテゴリーの変更

「設定」→「投稿設定」の“投稿用カテゴリーの初期設定”を未分類以外に変更し変更を保存します。

投稿設定

 

2. カテゴリー「未分類」削除

「投稿」→「カテゴリー」で“未分類”を削除。

カテゴリー一覧

カテゴリー「未分類」に設定されている投稿がある場合、その投稿は1で設定したデフォルトカテゴリーに設定されます。

WordPress、管理画面の左メニューから不要なメニューを非表示にする

下の画像は“投稿者”権限のユーザーでログインした際の管理画面左メニューの状態です。

wordpress管理画面の左メニュー

メインメニューを非表示にする

左メニューの全てを非表示にするためにテーマのfunctions.phpに以下を追記します。

これで投稿者権限のユーザーでログインすると左メニューが何もない状態になります。
左メニューを何もない状態にすることは少ないと思うので表示しておきたい部分はコメントアウト、もしくは削除することでメニューに表示することができます。

wordpressの管理画面から左メニューがなくなった状態

ifの条件部分はいろいろと指定することができます。
!current_user_can(‘level_10’)
とすればレベル10以下のユーザー全てに適用することができます。

ユーザーの種類についてはWordPress Codex日本語版に記載されています。

remove_menu_page(‘index.php’);
のindex.phpの部分はメニューのファイル名になるので上記以外、例えば「外観」だったら“themes.php”を指定することで「外観」を非表示にすることができます。

サブメニューを非表示にする

サブメニューを持つ項目のサブメニューだけを消したい場合もあると思います。
その場合はremove_menu_pageの部分を以下のように記述します。

 

remove_submenu_page(‘edit.php’,’post-new.php’);

上記は「投稿」→「新規投稿」を非表示にしてます。

remove_submenu_page(‘メインメニュー’,’サブメニュー’);
と記載することでサブメニューだけを消すことができます。

これらは表示を消しただけでアクセスできないわけではありません。
操作そのものも制御する場合はUser Role Editorなどを使って操作そのものも制御しましょう。

WordPressでメディアを追加時にメディアのリンク先をデフォルトで「なし」にする方法

WordPressで記事にメディアを追加するとメディアのリンク先がデフォルトで「メディアファイル」なっています。
このまま記事を作成するとメディアにリンクが張られた状態になります。リンク先はメディアそのものです。メディアが画像だった場合、リンク先はアップロードした元画像となり、縮小した画像を掲載した場合、元サイズの画像を見ることができます。

WordPressの「メディアを追加」画面

ただ、こんな設定をしたい状況はそうなく、基本的にはただimgタグで画像を掲載できればいい場合がほとんどだと思います。

デフォルトではリンク先が「メディアファイル」になっているので手動で「なし」にすればリンクは張られないのですが、それを毎回するのは面倒です。そこでデフォルトのリンク先を「なし」にしてみます。

http://(ワードプレスをインストールしたURL)/wp-admin/options.phpにアクセス

WordPressの管理画面内のリンクからは辿れない設定画面があります。WordPressにログインし管理画面を開きwp-admin/の後ろにoptions.phpを記載してページを開いてみます。
すると「すべての設定」ページが開きます。

image_default_link_typeをfileからnoneに変更

すべての設定からimage_default_link_typeを探します。デフォルトではfileになっているのでここを「none」に書き換えます。
書き換えたらページ最下部の「変更を保存」ボタンをクリックして設定を確定します。
これでメディアを追加した際のリンク先がデフォルトで「なし」になります。

すべての設定画面でimage_default_link_typeを修正

infinitescrollのオプション設定

このサイトでも使用している無限スクロールスプリクト「infinitescroll」ですがバージョンが上がり、一部仕様が変ったようです。

※動作検証はinfinitescroll version 2.0.2jQuery version 1.11.1で行っています。
※WordPressプラグインは使用していません。

infinitescrollでは追加コンテンツ読み込み時に好きな読み込み画像とテキストを表示できます。この設定を検索していると高確率でASCII.jpのこのページにたどり着くと思います。
このサイトもASCII.jpの説明の通りに設定して無限スクロールを実現してます。

ところが最近、新規に制作しているサイトでこれを実装しようとしたところ、動作しませんでした。どうやらオプションの設定方法が変更になったようで、以下のようにJS部分を記載したところオプションが無事反映されました。

 

さて、動いたのですが新規作成サイトでinfinitescrollに関する別の問題が発生しました。新規サイトはWordPressで構築しているのですがinfinitescrollが3ページ目を読み込まないのです。
WordPressのパーマリンク設定は変更していないので試しにURLに/?paged=2を付加して直接2ページ目を表示したところ、2ページ目からは3ページ目が読み込まれましたが今度は4ページ目が読み込まれません。
どうやら自ページの次ページしか表示できなくなっているようです。

その解決策がこちらのサイト(ARKの技術メモ)に記載されていました。
どうやら次のページ番号がURLのどの部分なのかinfinitescrollがわからなくなっているようです。
これもinfinitescrollのオプション設定でinfinitescrollに教えることができるようで、上記の設定を以下のように変更して解決しました。

[tmkm-amazon asin=’479736758X’][/tmkm-amazon]

WordPressのJSとCSSからverを取り除く

WordPressでは外部のjsやcssを読み込む際、WordPressのバージョンやプラグインのバージョンが「?ver=***」と付与されます。
このバージョン番号が付与されることによってバージョンが上がった際ファイル名が替わったとみなされ、ローカルにキャッシュされたものではなく、新たに読み込まれ、表示崩れ等の不具合を起こさない利点があります。

?ver=***が付与されている場合

(更新前)
example.css?ver=3.8.3

(更新後)
example.css?ver=3.9

更新前と更新後で別ファイル扱い

?ver=***が付与されていない場合

(更新前)
example.css

(更新後)
example.css

更新前と更新後は同じファイルとみなされる

なんだか便利なように感じます。
が、WordPressのデフォルトでソースに表示されている<meta name=”generator” content=”WordPress ***” />を消している場合、せっかく消した意味がなくなってしまいます。
そこでjsやcssに付与されるver=***も消してみよと思います。
function.phpに以下のコードを追記します。

全てのver=***を削除する場合

 WordPressのバージョンが付与されたver=***のみを削除する場合

 ちなみに<meta name=”generator” content=”WordPress ***” />を消す記述

これらを消したからセキュリティ的にどうこう、と思わないほうがいいと思います。常に最新のバージョンを使うようにしましょう。

WordPressのサムネイル画像をイチから再生成するプラグイン「Regenerate Thumbnails」

WordPressは画像をアップロードすると、アップロードしたオリジナル画像の他に、管理画面の「設定」→「メディア」で設定したサイズの画像を生成します。
これらの画像はサイトのデザインに合わせてサイズを変更することが可能なので、デザインが決まっていれば、この画面で数値を入力してサムネイル等の画像を設定することができます。
ここで設定した画像は画像アップロード時に生成されます。

メディア設定

が、サイトのデザインが途中だったり、リニューアルしたりしてサムネイルの画像が変更になったり、また管理画面で設定できるサイズだけでは足りず、追加でfunction.phpで設定したりした場合、すでにアップロード済みの画像には適用されません。

そこで便利なのが今回紹介するプラグイン「Regenerate Thumbnails」です。このプラグインを実行することでサムネイル画像等を最初から作り直します。

  1. Regenerate Thumbnailsをインストール
  2. Regenerate Thumbnailsを有効化
  3. 「ツール」→「Regen.Thumbnails」
  4. Regenerate All ThumbnailsボタンをクリックRegenerate All Thumbnailsボタンをクリックサムネイル再生成中

このプラグイン、大変便利なのですが問題点も。不要になった画像はそのまま残るのです。サムネイル生成時に設定にない画像を削除してくれるプラグインもあるようですが、運営が長いサイトだと、どこかで使っている可能性もあるので、設定にないサイズだから「消せる」とも限りません。
この辺りは慎重に。

そんなに頻繁に使うものでもないと思うので、再生成後はプラグインを「停止」にしていいと思います。

ドメイン変更を伴うWordPressのサーバー移転

WordPressで運用しているサイトのサーバーを移転(ドメイン変更有り)する際の手順をメモします。

1. 現サーバーからサイトデータ全てをローカルマシンにダウンロード

2. 現サーバーのデータベースからデータをエクスポート

phpMyAdminが使用できる環境なら簡単ですね。

phpMyAdminエクスポート

3. wp-config.phpの内容を新サーバーに合わせる

ダウンロードしたwp-confing.phpの内容を新サーバーの設定に変更します。

/** WordPress のためのデータベース名 */

define(‘DB_NAME’, ‘**********’);

/** MySQL データベースのユーザー名 */
define(‘DB_USER’, ‘**********’);

/** MySQL データベースのパスワード */
define(‘DB_PASSWORD’, ‘**********’);

/** MySQL のホスト名 */
define(‘DB_HOST’, ‘**********’);

4. 新サーバーにサイトデータをアップロード

5. 新サーバーのデータベースにデータをインポート

phpMyAdminインポート

問題なければ新ドメインでトップページくらいは表示されるはずです。
これで移行完了と思いたいのですがリンクが正しく飛びません。これはデータベースに登録されているドメインが旧ドメインのままになっているからです。これを新ドメインに書き換える必要があるのですが、SQL文を使ってドメイン名を置換するだけだと不具合が生じることがあります。

6. データベース情報の書き換え(移行PHPダウンロード)

Interconnect ITよりWORDPRESS (AND OTHERS) SEARCH AND REPLACE TOOL(http://interconnectit.com/products/search-and-replace-for-wordpress-databases/)をダウンロード。ダウンロードしたsearchreplacedb2.phpを新サーバーのWordPressディレクトリにアップ。

7. 6でアップしたsearchreplacedb2.phpにアクセス

6でアップしたsearchreplacedb2.phpにブラウザでアクセスします。
例:http://www.example.com/searchreplacedb2.php

  1. 最初の画面では[Submit]をクリックsearchreplacedb2 STEP1
  2. wp-config.phpのサーバー設定情報が表示されるので内容を確認。問題なければ [Submit DB details]をクリックsearchreplacedb2 STEP2
  3. 書き換え対象とするテーブルを選びます。
    全て選択して問題ないかと。テーブルを選択したら[Continue]をクリックして次へ
     ※「Leave GUID column unchanged? 」にはチェックを付けない方がいいそうです。searchreplacedb2 STEP3
  4. Search forには旧ドメイン(検索対象)を、Replace wihtには新ドメイン(置換内容)を入力し、[Submit Search string]をクリック。searchreplacedb2 STEP4
  5. データベースのドメイン情報の書き換え完了searchreplacedb2 Finish

8. 7でアップしたsearchreplacedb2.phpを削除します。

これでサーバーの移行は完了です。

WordPressの管理画面で文字化け

サーバー移転後にWordpressを操作していたら管理画面で文字化けが発生しました。文字化けが発生したのは「外観」→「メニュー」を操作している時。下記画像のような状態になりました。Wordpress管理画面の文字化け

メニューの名前とメニューがぞれぞれ文字化けを起こしています。文字化けを起こしているのは日本語で設定している部分でBLOGのような英語表記は文字化けを起こしていません。また、ユーザーが設定する部分以外も文字化けを起こしていません(「メニューを保存」とか)。

これはPHPが5.4の場合に起こるようです。php.iniの以下の部分を編集してapacheを再起動したら直りました。

(変更前) mbstring.http_input = auto

(変更後) mbstring.http_input = UTF-8