管理画面・投稿編集画面のカスタマイズ–不要なメタボックスを非表示にする。

忘備録です。

投稿、固定ページ、カスタム投稿などの編集画面に表示されるメタボックス(下の画像)を非表示にする方法。

meta_box01 meta_box02

表示オプションからユーザー毎に、ボックスの表示・非表示の設定はできるのだが、使わない不要なボックスはデフォルトで非表示にする方法。

remove_meta_boxという関数があるので、それを使うと可能。WordPess Codex Function Reference/remove meta box

投稿のカテゴリーをカスタム投稿で共有する

忘備録です。

register_post_typeの第2引数の配列に、’taxonomies’ => array(‘category’)を追加すると、投稿のカテゴリーをカスタム投稿でも使えるようになる。

例えば、投稿に「お知らせ」というカテゴリーを作っており、それをトップページ、もしくは「お知らせ」というカテゴリー・アーカイブで表示させる設計の場合、投稿のカテゴリーが「お知らせ」のpostだけでなく、カスタム投稿にもカテゴリー「お知らせ」にチェックを入れておけば、上記の一覧に表示することができる。

既存のcategoryというTaxonomyではなく、新規にTaxonomyを作成する場合は、register_taxonomyの第2引数に配列で複数の投稿タイプを設定すれば、そのTaxonomyは異なる投稿タイプで共通に使用できる。

逆に、明示的に null をセットしてTaxonomyを作成し、上記のregister_post_typeの第2引数にそのTaxonomyを設定することもできる。

WordPressギャラリーの仕様変更-もっと便利に使えそう。

仕様変更に気づいた背景

WordPressで記事を作成するとき、どうも画像の挿入が面倒くさい。1枚や2枚くらいなら、さほど面倒ではないのですが、旅行記のように大量の画の挿入と文章を書く記事では、画像の挿入が面倒で、記事のアップが億劫になっていました。

もっと楽に、記事に画像を挿入できないかということで、ギャラリー機能を見直し、カスタマイズすることにしました。

そのカスタマイズにおいて、ギャラリー機能の仕様が変更になったことに、改めて気づきました。

改めてというのは、「メディアを追加」のインターフェースが変わったなってのは、使ってれば気づくんですが、その機能自体の変更はカスタマイズを試みて、改めて気づいた次第です。

おそらくWordPressの3.4から3.5へのバージョンアップに伴って、変更になったはずです。

変更になった点

以前のバージョン(おそらく3.4以前)のギャラリー機能

その投稿にアップロードした画像しかギャラリーに使用できない。

1つの投稿に複数のギャラリーを挿入することは可能だが、その内容は同一になる。異なる内容のギャラリーにするには、ショートコードのパラメーターのincludeを使って表示したい画像を指定したり、もしくはexcludeを表示したくない画像を指定して、同一の写真が含まれないようにする必要がある。

パレメーターについては、WordPress Codex「ギャラリーショートコードの使い方」を参照のこと。

新しいバージョン(おそらく3.5以降)

その投稿にアップロードした画像以外もギャラリーに使用できるようになった。

ショートコードを確認すると、以前は挿入されるショートコードが

[gallay]

であったが、新しいバージョンでは、

[gallay ids=アタッチメントのID1,アタッチメントのID2,…]

のように、「ids」というオプションが入り、引数に選択したattachementのIDがデフォルトで入るようになっています。

このように、その投稿にアップロードした画像が否応なく選択されるのではなく、任意の画像を選んでギャラリーを作成できるので、1つの投稿に内容の異なる複数のギャラリーを挿入することが簡単になりました。

活用例

活用例1-ギャラリーごとに説明文を掲載できる。

以前は、1つの記事に複数のギャラリーを挿入することは、手間がかかるので行いませんでした。ですので、文章を掲載するのは、ギャラリーの前か後ろだけでした。

複数のギャラリーの挿入が簡単になったので、

ギャラリー1

記事

ギャラリー2

記事

 のように、ギャラリーごとに文章を差し込むことが可能です。

活用例2-複数の記事にアップロードした写真から写真集を作る

その投稿にアップロードした画像以外の画像でギャラリーを作成できるので、他の投稿にアップロードした画像を集めて、一つの記事を作成できます。

例えば、旅行記のブログの場合、旅行ごとに記事を作成し、写真を掲載するでしょう。

旅行で写真を撮影するとき、あるテーマを持って写真を撮影している人は多いと思います。

例えば、猫を見つけたら撮影するとか、レトロな建物を見つけたら撮影するとか、お城を撮影するとか。

それらの写真は同じテーマを持っていながら、複数の記事に挿入され、バラバラにサイトに存在します。新しいギャラリー機能では、それをまとめた投稿を作成することができます。例えば、猫の写真ばかりを集めた、写真集のような投稿です。

しかし、これはギャラリー機能を使うよりも、カスタムタクソノミーを使うほうが、もっと良いものができそうです。

アップロードした画像などのメディアは、WordPressではpost_typeがattachmentのpostとしてデータベースで管理されています。

post_typeがattachmentのpostにカスタムタクソノミーを作成して、そのアーカイブをカスタマイズすれば、「猫」だけの写真集や、「城」だけの写真集ができます。

写真集の更新も、写真をアップロードした後に、メディアの管理でタクソノミーを選択する手間はかかりますが、アップロードするごとに、既存のギャラリーを編集するよりも簡単だと思います。

これは、時間が出来たら早速作ろうと思います。

ちょっと、話がそれましたが、画像の挿入が面倒で記事の作成が億劫になっていたのですが、ギャラリーをうまく使うことで、もっと楽に記事の投稿やコンテンツの作成ができそうです。

ビジュアルエディタが使えない(WordPress)

WordPress を3.5.1にアップデートしたら、 WordPressの投稿または固定ページ編集ページで、ビジュアルエディタが使えなくなりました。

具体的には、編集画面を開くとテキストモードで表示され、「ビジュアル」タブをクリックしても編集モードが切り替わりません。

他のユーザーでログインして編集画面を開くと、ビジュアルモードで表示され、「テキスト」モードに変更できない。

この症状からすると、JavaScriptが正常に動いていないのではないかと推測できます。

Googleで情報を探したらプラグイン「PS Disable Auto Formatting」が干渉している情報があり、確認すると新しいバージョンに更新していないままでした。

新しいバージョンの詳細を確認すると

1.0.8

  • fix : bug fix : load javascript file for 3.3 in 3.2.1

とあったので、間違いないですね。

更新すると、ビジュアルエディタとテキストエディタが切りかえれない不具合は修正されました。

WordPress3.4アップデート時にDBアップデートのエラーが出る件

WordPress 3.4.2の場合は、管理画面から自動アップデートをクリックした直後にエラーがでて、管理画面が表示できなくなりました。

復旧しようと、WordPress 3.4のファイルをサーバーへアップロードしましたが、今度はデータベースの更新の画面が出て、ボタンをクリックした後にエラーが出て、先に進めませんでした。

原因は

wp-contentディレクトリにいれた「object-cache.php」が原因でした。

ひとまず、このファイルを削除したら、無事にアップデートできました。

 

こちらのブログ「ワードプレス3.4へアップグレードしたら、データベースの更新でエラーがでて焦った!!」(http://free.foot-trip.com/312.html)から、ヒントを得て解決に至りました。

どうも、キャッシュを取る系のプラグインがぶつかるみたいですね。

Facebookの外部サイトに設置されたいいねボタンの動作について検証

以前、「いいね!ボタン」の動作は「OGP」設定でニュースフィードに情報が飛ぶのか?で、外部サイトに設置されている「いいね!ボタン」をクリックしても、友達のニュースフィードに表示されなくなったことを書きました。

外部サイトの「いいね!ボタン」は、ボタンをクリックした後にコメントを追加すると、ニュースフィードにも表示されることがわかりました。

「いいね!ボタン」をクリックするとコメント欄が表示される。

ここにコメントを入力して投稿をクリックした場合は、友達のニュースフィードにも表示される。

場合によっては、いいね!ボタンをクリックした後に、「承認」というリンクが表示されて、承認が必要なときもあります。

注意点2つ

  1. 一定時間が過ぎると、コメント欄は自動で消えるので、急いでコメントを書いて投稿ボタンを押さなければならない。
  2. Facebookのソーシャル・プラグインで表示している場合はコメント欄が出てくるが、WordPressのプラグイン「WP Social Bookmarking Light」で表示している場合はコメント欄が出てこない。
    xfbmlに変更すると、コメント欄が出てきます。

ちなみに、OGPのog:type が articleの場合での、動作検証です。他のタイプのときは検証していません。

Facebookの外部サイトの「いいね!ボタン」をクリックした「いいね!」の共有範囲の影響はあるのか?

この共有範囲の設定が、ニュースフィードに表示されるかどうかに影響があるのでしょうか?

気になる所です。

まずは、その設定の変更する場所の説明です。

まず、自分のプロフィール画面を開き、メニューの「いいね!」をクリックします。

 

「お気に入り」の欄に「編集」のボタンがあるので、それをクリックするとお気に入りの編集画面になります。

お気に入りの編集画面を、ずーと下へスクロールすると『あなたが「いいね!」している他のFacebookページ』という項目がありますので、そのドロップダウンメニューで共有範囲を設定できます。

ここを変更すると、以前のいいねをしたアクティブティ・ログも変更されます。

共有の設定が、いいね!ボタン後の動作に影響するか検証してみました。

  1. 共有範囲「公開」、「コメント無しいいね」
  2. 共有範囲「公開」、「コメント付きいいね」
  3. 共有範囲「自分のみ」、「コメント無しいいね」
  4. 共有範囲「自分のみ」、「コメント付きいいね」

 

動作検証は、友達関係にあるテストユーザー(HarryとLinda)で行っっています。

まずは1,2の共有範囲「公開」の場合のアクティビティログ

それぞれの、アクティビティログの表示です。

上が1の「コメント無しいいね」、下が2の「コメント付きいいね」のアクティビティログの表示です。

次に3、4の共有範囲が「自分のみ」のアクティビティログです

上が、3の「コメント無しいいね」、下が4の「コメント付きいいね」のアクティビティログの表示です。

共有範囲が「自分のみ」であっても、コメントをつけた場合は共有範囲が「公開」になっています。

注目すべきは、

いいね!ボタンのみでコメントのない場合は「リンクについて「いいね!」と言っています。」というアクティビティ
なのに対して、
コメントをつけた場合は「リンクをシェアしました。」になっています。

 

Harryさんの友達のLindaさんのニュースフィードのキャプチャです。

「リンクをシェアしました」のアクティビティは、ニュースフィードに表示されています。

コメントをつけた場合は、ニュースフィードに表示されています。

まとめ

  • いいね!ボタンをクリックした場合のアクティビティは「いいね!と言っています」なので、ニュースフィードに表示されない。
  • いいね!ボタンをクリックした後、コメントをつけた場合のアクティビティは「リンクをシェアしました」なので、ニュースフィードに表示される。

外部サイトの「いいね!」の共有は、ボタンをクリックした人の行動に依存する

OGPを設定すれば、外部サイトでの「いいね!」がニュースフィードに掲載されるということはないようです。つまり、サイトの運営者が、ニュースフィードに掲載させるかどうかをコントロールすることはできないということです。

しかし、「いいね!」の後にコメントをつけれるように、Facebook純正のソーシャルプラグインでボタンを設置しているほうが良さそうです。(追記 xfbmlで設置するほうがよい)

外部サイトでは、「いいね!」だけで、ニュースフィードに表示されなくなったので、以前より拡散性は低くなったと言えます。

しかし、「いいね!」をクリックする人が、それを「シェア」するかどうかをコントロールする権限を持っているほうが正常だと言えます。

サイト運営者は、「いいね!ボタン」の動作を気にするよりも、読者がシェアしたくなるような、よいコンテンツを作成することに時間と労力を注いだほうが良さそうですね。

【追記 2012/10/12】

ブログの記事で「いいね!」をクリックしても、友達のニュースフィードに表示されることが確認されました。

しかし、「いいね!」よりも「シェア」のほうが表示されやすい。もちろん「シェア」よりも「投稿」のほうが、表示されやすいですし、外部サイトでのアクティビティよりもFacebook内でのアクティビティのほうが表示されやすいです。

また、自分と友達の「つながりの強さ(エンゲージメント)」も表示に関係します。

表示設定で投稿ページに任意の固定ページを設定した場合にそのページタイトルを得る方法

非常に長いタイトルですが、書いているとおりのTipsです。

まず、その方法。

$page_for_posts = get_option( 'page_for_posts' ); 
$my_page = get_page($page_for_posts);

echo $my_page->post_title;

get_option関数の引数にpage_for_postsを指定することで、表示設定で投稿ページに指定した固定ページのIDを得る事ができます。

後は、そのIDを使って、get_pageでpageオブジェクトを取ってきて、ページのタイトルをエコーしました。

なぜ、こんなことをするのか

WordPressをカスタマイズする人は、WordPressでブログじゃないホームページを作ることは、よくあるでしょう。

ブログじゃないホームページだけどWordPressは元々ブログのCMSだから、投稿機能を使ってブログもサイト内部に作る事ができます。

その時、すべての投稿を表示するブログのトップページをどのように作るかというと方法は2つ。

  1. 固定ページのカスタムテンプレートを作成して投稿一覧を表示する
  2. 設定>表示設定で、投稿ページに任意の固定ページを設定する

普通は、この2つでしょう。

どちらが、良いのかというと、どちらでもいいです。

ただ僕は、Webサイト内にブログじゃないページ(固定ページ)がメインのサイト(企業のホームページとか)に、ブログを含めた場合、ブログの記事はブログだとわかりやすくしたかった。

それで、ブログ一覧やアーカイブページ、ブログの個別記事などを表示した時に、ページタイトルに「ブログ」であることを表示しようと思いました。

テンプレートに、直接「ブログ」と書けばいいではないか

テンプレートに直接書いた場合、変更や修正ができるのは僕だけです。

例えば、ブログを「スタッフブログ」というタイトルで使いたい人もいれば、「社長ブログ」で使いたい人もいるでしょう。企業のWebサイト内のブログでも、Webサイトのタイトルとは別にブログのタイトルをつけたい人もいるはずです。

また、マルチサイトで複数のサイトを作成し、1つのテンプレートを使い回ししている場合は、テンプレートに直接書き込むと、サイト毎に異なるタイトルをつけることが出来なくなります。

固定ページのタイトルを、そのままブログのタイトルとして使用する

表示設定で、投稿ページに指定する任意の固定ページにも、タイトルをつけます。そのページタイトルをブログのタイトルにします。

その固定ページは、カスタムメニューでも使用するでしょう。

そして、上記の方法で、ブログのトップページや、アーカイブページにも使用するようにしておけば、固定ページのタイトルを変更すれば、ブログタイトルもすべて変更されます。

つまり、クライアント側で、ブログタイトルを自由に設定できるようになります。

できるだけ、テンプレートに固定的な情報を書き込まないという志向なので、こんなことをしています。

[WPプラグイン]投稿のリストをショートコードで表示するプラグイン

WordPress by Adriano Gasparri

固定ページの場所に、特定のカテゴリーの投稿や特定のタグがついた投稿のリストを表示させたいときがあります。

普通は、カスタムフィールドで表示させたいカテゴリー名なんかを入れて、カテゴリーIDを拾って、get_posts関数の引数にして回すように、テンプレートをカスタマイズすればいいんです。

理想は、カスタムフィールドに名前と値を入れたら、the_contentsにフィルタかけて表示するとかが便利なんですけど、見つかりませんでした。

ショートコードで表示させるものは見つかりました。

ショートコードなので、投稿エリアの好きなの場所にリストを表示させることができます。Lightweight Google Maps で地図を表示するか、 Google Maps Anywhereで地図を表示するかの違いみたいなもんですかね。

ショートコードで投稿一覧を表示するプラグインはコチラ

Post List というプラグインが、この要求を満たしてくれます。

ショートコードの引数にカテゴリー名、タグ名を設定して、特定の条件を満たす投稿のみを表示させることができます。カテゴリー名、タグ名とも複数設定が可能ですが、タグ名を複数設定した場合、設定したタグ名をすべて含む(AND検索)か、いずれか含む(OR検索)かを、requesttypeという引数に設定して使いわけができます。カテゴリーには、その選択はなく常にOR検索です。(そもそも、一つの投稿は、複数のカテゴリーに属さないという考えなのかもしれません)

もちろん、表示させる投稿の件数も引数で設定できます。

しかし、不具合あり

このプラグインには不具合があります。

例えば、固定ページにショートコードで一覧表示をさせたとします。そして、その固定ページのディスカッションの設定でコメントもトラックバックも、その許可のチェックを外していたとします。

しかし、投稿の一覧表示を表示させた場合、一覧の末尾の投稿のコメント欄やコメントが表示されます。

ちなみに、エディットリンクが表示されている場合にクリックすると、末尾の投稿の編集画面が開きます。

原因は?

プラグインのソースコードを見たところ、ループが終了した後に、postdataをリセットしていないのが原因でした。

ループが終了した後に、wp_reset_postdata関数を呼び出して、ポストデータをリセットすることで解決します。

このプラグインは、投稿の一覧を取得するのに、WP_Queryで新規オブジェクトを作成してますが、そもそもget_postsでいいんじゃないのって思ったりします。

実際、使うかどうか分かんないんですけどね。

別に、任意の場所に表示する必要もないので、「カスタムフィールドに名前と値を入れたら、the_contentsにフィルタかけて表示する」ってのを作ったほうが、クライアントが操作しやすいですしね。

カスタム投稿タイプのタクソノミー・メニューを好みの順番でウィジェットに表示する

備忘録です。

まず、カスタム投稿タイプの作成は、function.phpにコードを書くことも作成できるが、GD Custom Posts And Taxonomies Toolsプラグインを使って作成することもできる。

GD Custom Posts And Taxonomies Toolsをインストールすると、TaxonomyのTermListを表示するウィジェットも追加される。

TaxonomyのTermListのウィジェットを追加するプラグインは他にもあるが、カスタム投稿タイプの作成に上記プラグインを使う方法を選択したので、そのプラグインで追加されるウィジェットを使うことにした。

Term Listの表示順をコントロールする

GD Custom Posts And Taxonomies Toolsプラグインで追加されるWidgetの表示部分のコードを見てみると、結局、get_terms関数で得た結果をwalk_category_tree関数で、表示するHTMLを作成している(みたい)

Term Menu Orderプラグインをインストール

このプラグインをインストールすると、Termに順序をコントロールする数字を入力できるようになります。(ページの順序のように)

そして、get_terms関数の第2引数の配列に’orderby”=>’menu_order’を含めれば、自分で設定した順序で表示されるようになります。

GD Custom Posts And Taxonomies Toolsのウィジェットをカスタマイズ

plugin dir/widgets/gdtt-terms-list/の中にあるファイルが、terms-listウィジェットのフォーム部分の表示。filter.phpに「Sort by」のselectフォームがあるので、optionタグにmenu_orderを追加する。

以下が書き換えたコード

<select id="<?php echo $this->get_field_id('orderby'); ?>" name="<?php echo $this->get_field_name('orderby'); ?>">
<option value="name"<?php echo $instance['orderby'] == 'name' ? ' selected="selected"' : ''; ?>><?php _e("Term name", "gd-taxonomies-tools"); ?></option>
<option value="count"<?php echo $instance['orderby'] == 'count' ? ' selected="selected"' : ''; ?>><?php _e("Posts count", "gd-taxonomies-tools"); ?></option>
<option value="menu_order" <?php echo $instance['orderby'] == 'menu_order' ? ' selected="selected"' : ''; ?>><?php _e("Menu Order", "gd-taxonomies-tools"); ?></option>
</select>


最後のoptionが追加したもの。

これで、WidegetのセレクトフォームのSort byでMenu Orderを選択すれば、自分で設定した表示順でTermリストが表示される。

ちなみに、ID順での表示も選択できるようにするには、オプションに


<option value="" <?php echo $instance['orderby'] == '' ? ' selected="selected"' : ''; ?>><?php _e("Term ID", "gd-taxonomies-tools"); ?></option>


を追加すればよい。(get_terms関数にorderbyのデフォルトはID順なので)

[WPプラグイン]投稿をページへページを投稿へ変換するプラグイン

タイトルどおりのプラグインであるならばp2pConverterというプラグインがありましたが、同じ作者により新しいプラグインができていました。

pTypeConverter

postタイプを変換することができます。WordPress Ver3に搭載された「カスタム投稿」機能に対応して、Post Typeをカスタム投稿で作成したPost Typeにも変換できます。

Movable Type3をCMS的に使用して作成していたサイトをWord Pressに移行したとき、Postをページやカスタム投稿タイプへ変換するのに使用できます。

MT3では、投稿はWPでいうところの「Post」のみで「Page」はありませんでした。ですので、MTをブログではなくて、CMS的に使用してサイトを作成するときは、カテゴリーメニューを表示する時に除外カテゴリーを設定して、ループを2回に分けて回したりと、面倒な事をしていました。

だから、投稿タイプがPostとPageの二つあるWord Pressに移行する理由なんですけど、データの移行したMTのEntryのデータは、WordプレスではすべてPostになります。その投稿タイプをPageに変換する必要があります。

phpMyAdminで書き換えれば、事足りるのですが、プラグインでできると便利です。管理者以外にも作業できますし。

また、既存のPostをカスタム投稿タイプに変換できるのも便利です。

けど、あまりにPostの数が多いと、該当するPostを探すのが大変。phpMyAdminのほうが楽だったり。。。。