08. 11月 2014 · [WP] Search Regex でカスタム投稿タイプを対応させる方法 はコメントを受け付けていません。 · Categories: WEB制作 · Tags: , ,

ご無沙汰してます。ガッツリ制作シーズンに入った小杉です。

やー、レスポンシブサイトは Rootstrap を親テーマにして改造するとめちゃくちゃ速いということがわかりました。

それは置いといて。

 

文字列を置換できるプラグイン、Search Regex

/Everybody stand back/

Search Regex ってプラグイン。便利ですよね。

WordPress コンテンツ内の文言を検索したり、置換したりできるプラグインです。

公式サイト:WordPress › Search Regex « WordPress Plugins

ただ、更新が滞っているので若干心配ではありますが。

 

ローカル環境から本番環境に移行する際、エクスポートしたコンテンツのパスが変わるので、それを全部置換したいなと思って。

phpMyAdmin と FTP が使えない状況だったので、管理画面で何とかするしかないわけです。

ちなみに、ローカル環境からエクスポートしたデータはテキストデータなので、それを一括置換してからインポートするという方法もあります。

すっかり忘れてました。

 

まあ、そんなオッチョコチョイさんにもありがたいプラグインが、Search Regex です。

ありがたいんですが、カスタム投稿タイプに対応していないんですよね。

代替プラグインがあるかな〜?と思って探してみたんですが、見つからず。

そんなら、カスタマイズしてしまおうと。

 

ということで、ここからは自己責任です。OK?

中身なら、post_content.php を変えるだけ

plugins/search-regex/searches/ の中身が、検索対象を司っています。

その中に post_content.php があります。

10行目を以下のように変更します。

変更前

変更後

つまり、 AND post_type IN (‘post’,’page’) をカットしました。

カスタム投稿タイプに限らず、すべてを検索対象にしちゃえ!と少々乱暴ですが、意図としてはもれなく確認したいため。ひとつずつでも個別に置換できますしね。

 

同様に、タイトルの全置換は post_title.php かなって思いますよね。

ですが、ここには制限がありませんでした(笑)

タイトルは全部の記事を横断できるんじゃないかなと。

 

念のためバックアップをとっておき、ローカルで確認してから、本番の作業環境で実行しました。

特に問題なくガッと切り替わってくれました。オッチョコチョイさんでもチョチョイのチョイです。

良かったら試してみてくださいね╭( ・ㅂ・)و ̑̑

 

はい、ごめんください。
備忘録のためのメモです。

Advanced Custom Fields はカスタムフィールドを柔軟に設定できるプラグインです。
ここでセレクトボックスを使っているのですが、値と表示名を変えているんですね。

apple : りんご
banana : バナナ
chocolate : チョコレート

という状態です。
設定された値で、画像を表示させることが目的でした。

<img src=”./images/apple.gif” alt=”apple” />

という具合に。

選択肢として使われている表示名も欲しいなあ・・・

上記だと、 alt で表示するものも apple や banana になってしまうので、

<img src=”./images/apple.gif” alt=”りんご” />

と、表示名の値を取得したいところです。

Advanced Custom Fields のセレクトボックスの、ここ!

ですが Advanced Custom Fields の利用方法は値と表示名が同じ場合が前提となっている記事が多いので、なかなか方法が見つかりませんでした。

なら、直接データベース覗いちゃえばいんじゃね?

何処かに格納されているはずなのでデータベースを見てみたところ、フィールド番号で格納されていました。
このフィールド番号を確認する一番簡単な方法は、Chrome などの開発者用ツールで該当する入力欄の id を確認すると良いです。

acf-field_1_label という id が設定されている場合、下記の方法で実現できます。

ポイントは get_field_object で該当フィールドのデータを取得するところですね。

素敵なWPライフを~

WordPress LOGOはい、ごめんください。

wp_is_mobile は 3.4 移行から使える、モバイルからのアクセスを判別する便利な関数です。
例えばスマホ用に見せたい物がある場合や、表示を変更したい場合に、下記のように使えます。

wp_is_mobile のモバイル判別方法

wp-includes/vars.php の 101 行目で、下記のようなコードがあります。

つまり、ユーザーエージェントに下記の文言が含まれていると、モバイルと判断されます。

Mobile, Android, Silk/, Kindle, BlackBerry, Opera Mini, Opera Mobi

WP Super Cache のモバイル判別方法

そしてキャッシュ機能として有名なプラグイン、WP Super Cache 。
これはモバイルにも対応していて、モバイルからのアクセスがあった場合にはキャッシュしないという機能があります。

下記がモバイルと判断されるユーザーエージェントのリスト。これらが含まれていると「モバイルからのアクセスだ」と判断されます。(2013.2.15 ver1.2)

2.0 MMP, 240×320, 400X240, AvantGo, BlackBerry, Blazer, Cellphone, Danger, DoCoMo, Elaine/3.0, EudoraWeb, Googlebot-Mobile, hiptop, IEMobile, KYOCERA/WX310K, LG/U990, MIDP-2., MMEF20, MOT-V, NetFront, Newt, Nintendo Wii, Nitro, Nokia, Opera Mini, Palm, PlayStation Portable, portalmmm, Proxinet, ProxiNet, SHARP-TQ-GX10, SHG-i900, Small, SonyEricsson, Symbian OS, SymbianOS, TS21i-10, UP.Browser, UP.Link, webOS, Windows CE, WinWAP, YahooSeeker/M1A1-R2D2, iPhone, iPod, Android, BlackBerry9530, LG-TU915 Obigo, LGE VX, webOS, Nokia5800

同じく下記も設定されていますが、接続ネットワークでも見てるのかな?

w3c , w3c-, acs-, alav, alca, amoi, audi, avan, benq, bird, blac, blaz, brew, cell, cldc, cmd-, dang, doco, eric, hipt, htc_, inno, ipaq, ipod, jigs, kddi, keji, leno, lg-c, lg-d, lg-g, lge-, lg/u, maui, maxo, midp, mits, mmef, mobi, mot-, moto, mwbp, nec-, newt, noki, palm, pana, pant, phil, play, port, prox, qwap, sage, sams, sany, sch-, sec-, send, seri, sgh-, shar, sie-, siem, smal, smar, sony, sph-, symb, t-mo, teli, tim-, tosh, tsm-, upg1, upsi, vk-v, voda, wap-, wapa, wapi, wapp, wapr, webc, winw, winw, xda , xda-

モバイルとパソコンの表示を変えたい時、管理画面の「詳細」タブから、「詳細」項目の Mobile device support. (External plugin or theme required. See the FAQ for further details.) という部分から設定を確認できます。

チェックが入っていれば、モバイルからのアクセス時にはキャッシュを生成しません。
これによって、「モバイルとパソコンの画面デザインを分けている」かつ「キャッシュ機能を有効にしている」場合でも、キャッシュを作るのはパソコン用画面のみとして対応しているわけです。(モバイル用のキャッシュも作れればいいんだろうけどなあ…)

iPad はパソコン?モバイル?

さて、タブレット端末の場合、私はパソコン用の画面を見せるのが一番良いと思っています(今のところ)。
そのため、iPad での表示はパソコンと同じ物を想定していました。

iPad のユーザーエージェントは下記のようになっています。(Chrome で iOS5 のエミュレートした場合)

Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3

wp_is_mobile では、Mobile が引っかかるので モバイルと判断されます。
WP Super Cache では、該当するものがないので パソコンと判断されます。

ただ違うのね、で終わりではありません。

wp_is_mobile でモバイルと判断されるということは、モバイル用の画面を表示する
WP Super Cache でパソコンと判断されるということは、キャッシュを生成する

モバイル用の画面がキャッシュされ、パソコンでアクセスしても有効期限までモバイル用の画面が表示されてしまう。

という状況になります。逆なら、iPad でアクセスしたらパソコン用の画面だけどキャッシュされない、ってなるのですが。

じゃあ、どうしたらいいの?

キャッシュプラグインの内容のほうが複雑なので、

(1) wp_is_mobile をカスタマイズする
(2) 使わないで別の関数を使う

という 2 つの選択肢があります。ただし、(1) はコアファイルの修正なのでお勧めしません。必然的に (2) の選択肢となります。functions.php に is_mobile という関数を作って使うのが一番。

参考:【WordPress】User-agentを判定してモバイル用コンテンツを切り分け、検証する方法

上記コードを functions.php に書いて使います(少し修正しています)。
これでも willcom や google phone に対応できてないのですが、アクセス解析のユーザーエージェントを確認して追加していくくらいでいいのかなあと。

参考:スマートフォンUSERAGENT一覧+モバイル版クローラ | カグア!Googleアナリティクス解説Blog
参考:serbanghita/Mobile-Detect · GitHub

タブレット端末での検証もお忘れなく!

Finger face with a question
はい、ごめんください。

先日、WordBench 新潟 に参加した際、カスタムフィールドの使いドコロを知りました。

カスタムフィールドの便利さは何となく知っていたのですが、DB 直接構えばいいや~とか思ってたので、ずっと使わないでいました。

それを実例とともに紹介されて感動し、お客さんにも優しい UI が提供できると知って、今まさに作ろうとしている機能をこれで対応しようとしたわけです。

Advanced Custom Fields はあったものの…

プラグイン → 新規追加 で「Advanced Custom Fields」を探し、インストール。そして有効化。
口笛吹きながらさらっと入れることができたんですが・・・左のメニューに表示されない、だと・・・?

バージョンか?競合か?と調べても、特に問題なし。
グーグル先生に尋ねたところ、昨日フォーラムに上がってました。

WordPress › フォーラム » advanced custom fieldsをインストール→メニューに表示されない

そこでも返信したのですが、作者のサイトに確認しに行ったら、ちゃんと書いてありました。

All Discussions – Plugin Support

Dear ACF users, WordPress have recently changed their terms and conditions for hosted plugins. Over the next few weeks I will be focusing on rebuilding and improving ACF to ensure it adheres to the new rules.

In this time, I would appreciate your patience and ask you to first search for information before posting a new discussion.
Cheers, Elliot

俺訳するとこんな感じ。

ACF(advanced custom fields)ユーザーの皆様、WordPress では最近、プラグインのホスティング契約条件が変更されました。
今後数週間にわたって、新しいルールに準拠できるようACFを再構築し改善することに注力いたします。
ご迷惑をおかけしますが、新しくコメントする前にご承知おきください。

主な原因は「プラグインホスティングの契約条件が変わった」ということらしいのですが、ソースがよくわかりませんでした。公式に乗っていても問題を孕んでいるプラグインもあるというし、それらを一掃するために何か変わるのかなとゲスパー。

そんな訳で、公式から自動インストールはしばらくできないようです。
そのため、Github から ZIP ファイルをダウンロードして、解凍したものをアップロードする必要があります。

2013.2.11 時点では、下記のどちらかをダウンロードすれば良いでしょう。

* 3.5.8.1 (latest) – https://github.com/elliotcondon/acf/ (安定版)
* 4.0.0 (beta) – https://github.com/elliotcondon/acf4 (ベータ版)

画面中の「ZIP」をダウンロードして、「ZIP」からダウンロードしたものを advanced-custom-fields フォルダに入れることで動作します。安定版の方はちゃんと日本語化されていました。

有効化しても特に変化がわからないから、「まだ有効化されていません!有効化するには別途ファイルをダウンロードする必要があります」とかアナウンスがあればいいのにと思った次第。
自動インストールはこういう所でつまづいてしまいますね。自戒も込めてエントリー。

これならすぐわかんじゃん!はい、ごめんください。

公開前のページ、つまり「下書き」「レビュー待ち」「予約投稿」の状態の投稿記事や固定ページを、ログインしなくても確認できるプラグイン Public Post Preview が超絶ありがたすぎて鼻水でた勢いで日本語化しました。
といっても、元々わかりやすい英語なので、難しい説明は一切ないんですけどね。

公式:WordPress › Public Post Preview « WordPress Plugins

プラグインのインストール方法は省きますが、プラグインをインストールした lang ディレクトリに下記のファイルをアップロードしてください。(.po を同梱していますが、.mo ファイルだけでも OK です。)

Public Post Preview 日本語訳ファイル(2.1.1 対応版)

2013.04.26 追記:2.2はWP3.5以上からの対応となります。

有効にした後、どうしたらいいの?

設定箇所はなく、サイドバーにメニューは出てきません。新規投稿の状態ではまだ使えませんので、投稿編集画面に下記のような項目が表示されます(日本語にした場合)。

新規投稿の時はまだ使えません

この記事が下書きなどで保存されると、下記のように変わります。

下書きになると限定公開できるようになります

あとはチェックを入れると、下記のように表示が変わり、自動的に限定公開できるようになります。プレビュー画面を共有するんだよ、というのがよくわかりますね。

表示されたURLを使ってくだされ

注意その1◇有効期限があります

デフォルトでは48時間に設定されています。これだと短い!もしくは長い!という方は下記のコードを function.php に追記して有効期限を変更することができます。

14日にしたいなら、 60*60*24*14 ですし、12時間にしたいなら 60*60*12 で OK です。

注意その2◇「非公開」では使えません

「非公開」の記事を設定しようとすると、「この投稿はもう公開されてるから使えないよ」的なメッセージが表示されます。使えるのは下書き、レビュー待ち(保留中)、予約投稿 の3つです。
これらの「プレビュー画面」を強制的に公開するプラグインなのですね。

CMS として使うための必須プラグインと言っても過言ではなぁい!(個人的に)

WordPress を CMS として使っていると、確認だけはするけど CMS にログインする程でもない、という場合・・・例えば上司や別部署、お客様や関連他社の確認が必要になることがよくあります。

今までは共通のログイン ID とパスワードを発行して確認していただいていたのですが、「どうやって見るんだっけ?」という問い合わせが多く、そのたびに通達して毎月の恒例行事となっていました。

それが!ログインしなくても閲覧できるので、ユーザーの登録とか ID 管理とかログイン権限とか関係なく、ちょこっと見せたい時にものすごく重宝します。

ワークフロー機能もついていたらいいのかな?とも思いましたが、このシンプルさがありがたいですね。

Twitterはい、ごめんください。
WordPress Advent Calendar 2012 の企画で翻訳について言及している方がいらっしゃったので、途中で投げ出しかけてたプラグインを日本語化して作者の方に送ってみました。

参考:プラグインの翻訳をして作者に送ってみよう! #wacja2012 | notnil creation weblog

追記:2013.01.10

バージョン 4.0.4 が発表されたので日本語化しました。翻訳用にソースを改変しているので、プラグイン用のファイルがまるごと入っています。

Tweet Old Post 4.0.4 日本語対応版(非公式)

— 追記ここまで —

PoEdit のソースから更新機能を使ったら、翻訳箇所を自動的に見つけてくれたのでとっても捗りました!(テキストエディットでちまちま行番号を設定してた→そして投げ出してた)

この記事の執筆時点では 4.0.3 が最新バージョンです。翻訳ファイルが入ってなかったり、翻訳対応箇所が少なかったりしたので、色々弄りました。作者の方にはファイルを送ってあるので公式アップデートがあるといいなあ。

使い方

日本語対応ファイルは 4.0.3 の差分と修正ファイルしか入っていません。
そのため、まずは本体(v4.0.3)をダウンロードして、日本語版のファイルを上書きしてください。

サーバにアップロードするのは、本体と mo ファイルのみで問題ありません(po ファイルは翻訳の元ファイルなので実際には使用しません)。

公式サイト:WordPress › Tweet Old Post « WordPress Plugins

Tweet Old Post 4.0.3 日本語対応ファイル(非公式)

 

そもそも Tweet Old Post ってどんなプラグイン?

過去に投稿した記事を、ランダムに選んで自動でツイートするプラグインです。

  • 設定した過去の期間の投稿記事をランダムでツイートします。
  • ツイートしたくないカテゴリを設定できます。
  • ツイートしたくない投稿も選べます。
  • 短縮 URL サービスを使えます。(でも goo.gl は未対応)
  • 1日に何回ツイートするか設定できます。

CURL(Client URL:外部サイトの情報を簡単に弄れるライブラリ)を使用しているので有効なサーバでないと使えないという難点はありますが。(ロリポップは使えますよ)

文字化けするって噂なんだけど?

要するにマルチバイト言語に対応していなかったことが原因なので、日本語対応した際に条件分岐を入れておきました。mb_strlen という関数があった場合は、そっちを優先するように、など。

作者のサイトには色々要望が寄せられているので、もしかしたら近々アップデートするのかな、とも思っていたのですが、そうなったらまた翻訳しなおしますかねー。

ちなみに作者の方はインドの方。そんなにカレー食べないってホントですか。

23. 12月 2012 · [WP] Tweet Old Post が自動投稿されないのでソースを直したよ はコメントを受け付けていません。 · Categories: WEB制作 · Tags: , ,

Twitter先日、日本語化を行った Tweet Old Post (4.0.3) ですが、イマイチ自動ポストされないのでソースを見なおしてみました。

wp-cron にスケジューリングされているわけではないようなので、何がトリガーになってるのかなと調べたところ、init で呼んでることがわかりました。つまり、ページを読み込むたびに呼んでるんですねえ。

add_action(‘init’,’top_tweet_old_post’);

init
WordPressの読み込みが完了し、ヘッダーが送信される前に実行する。$_GET や $_POST トリガーを妨害するために使える。

wp-cron も擬似的な cron で、誰かのアクセスをトリガーにして動作するため、アクセスが少ないとうまく動作しないかもしれません。ですが、これはちゃんと動いていることが判りました。

[Tweet Now] ボタンで投稿はできるので、この辺りを追ったところ、どうやら初期の設定で「最初にツイートした時間」が登録されないバグがあるようでした。wp-cron にでも入れようかと思いましたが、ここを解決したら動いたので、メモ。

top-admin.php の更新完了部分( //successful update message を探すと良いです )で、1行を追加します。

top-admin.php を書き換えたら保存し、設定画面で設定内容を保存します。
これで最終ツイート時刻を設定できるので、あとは○時間後に(アクセスがあれば)動作します。

もし自動的に動かないよー、という方はお試しください。

27. 11月 2012 · [WP] Twitterでブログ記事の概要などを表示できるようにしてみた(Twitter Card) はコメントを受け付けていません。 · Categories: WEB制作 · Tags: , ,

@kasumii さんの記事を見ておおーっと思ったので取り入れてみました。

参考:ブログをTwitter Cardsに対応してサムネイル画像や記事の概要が表示されるようにしてみた | memobits

方法1 : header.php に追記する

meta タグを下記のようにすればOKです。description の部分はトップページならブログ自体の概要、投稿記事などならその記事の抜粋を表示するようにしています。

方法2 : プラグインを使う

Twitter Card というプラグインそのものズバリもあるのですが、WordPress SEO by Yoast を使えば一発です。

管理画面左メニューの「SEO」→「Social」の画面最下部にある「Add Twitter card meta data」にチェックを付け、「Site Twitter Username:」に Twitter のアカウント名(@いらないですヨ)を入れて保存するだけ。

これで head タグ内に Twitter Card 用の meta タグが挿入されます。こんな感じ↓

実際にどう見えるのか確認しよう

Preview your Twitter Card | Twitter Developers

上記 URL に Twitter のアカウントでログインしてから、適当に記事の URL を入れて [Preview Card] をクリックします。投稿後にどんな表示になるか、プレビューを確認できます。

プラグインで設定した場合、トップページには反映されないのでご注意ください。ですんで、入力する URL は個別記事の方が良いです。

内容を確認したら申請しよう

Participate in Twitter Cards | Twitter Developers

Contact Information には既に情報が入っているので、確認だけでOKです。Website Information に、下記のように情報を入力します。

大体1週間くらい審査期間があるようです。ちなみにウチは header.php いじってから申請し、プラグインあることに気づいて、わちゃわちゃしてたら「Please resubmit your Twitter Cards request」というメールが送られてきて、「twitter:description がないよ!」と言われ再審査となりました。トホホ。

12. 11月 2012 · [WP] posts_nav_link が WP_Query のループで動作しない理由と解決策とスニペット はコメントを受け付けていません。 · Categories: WEB制作 · Tags: , ,

Wordpress Button Closeup

結論から言っちゃうよ

  • new WP_Query でクエリを新しく作ったものには posts_nav_link が使えない
  • posts_nav_link(前後記事へのリンクを張る)を使いたい場合は query_posts を使おう
  • new WP_Query を使いたい場合は WP-PageNavi を使ってページングしてしまおう

なぜ posts_nav_link が使えないのか

参考:get_posts_nav_link (WordPress Function) – WPSeek.com

ソースを見たら一目瞭然でした。global $wp_query; として、大元のクエリをベースにしているためです。新しく作ったクエリを引数で渡せないかなと思いましたが、そのままでは無理そうですね。

その点、query_posts はメインのクエリ($wp_query)を変更するので posts_nav_link を使えるというわけです。

WP_Query × WP-PageNavi

WP-PageNavi は 1,2,3… と番号でページングしてくれるプラグインです。これにはクエリを渡せるので、下記のように使えます。

最後は wp_reset_postdata(); で締めましょう。新しく作ったクエリを消して元に戻す、というイメージで。

query_posts × posts_nav_link

posts_nav_link もループ外で使用します。

最後は wp_reset_query(); で締めましょう。元のクエリに戻す、というイメージで。

今回は結果的に、WP_PageNavi を入れたほうがスッキリしたのでプラグイン採用しましたよ。

ステップメールとは、商品を購入するなどして登録したメールアドレスに、指定された日数ごとに自動的にメールを送信するサービスです。ウェブのマーケティング手法としてもてはやされていますが、導入するには結構な費用がかかることが多いのと、仕組みがよくわからなくて敬遠している、という状況が多いのでしょうか。
メールマガジンは「1対多」ですが、ステップメールは「1対1」というアプローチが得意なので、積極的に使ったほうがいいのではないかと思います。

このステップメールを WordPress の Cron 機能でできるプラグインがあるんじゃないかと探してみたら、良さそうなのがありました。Github にもソースを公開していて、一番信頼できそうな下記をオススメします。

WordPress › WP Autoresponder And Newsletter Plugin « WordPress Plugins (2012/11/9 : ver.5.2.8)
( Requires: 2.8.2 or higher / Compatible up to: 3.3.2 / Last Updated: 2012-3-3 )

特にこの手のプラグインは、間違っても公式以外のところから入手してはいけません。こんな報告もあったようです。詐欺プラグインに要注意!

WordPress › フォーラム » stepmail-express のカスタマイズを教えてください!

WP Autoresponder はバグフィックス等(下記参照)を行なっている最中のようなので、使い方は後回しにして、今回はひとまず紹介に留めておきます。新バージョンが待ち遠しいですね。

インストールにあたって、よくありそうな事をまとめました。

日本語は使える?

プラグイン自体は全て英語ですが、日本語は問題なく使えるようです。

インストール時にこける

Fatal Error が出る場合はPHP4の環境です。PHP5でないと使えません。

設定後、管理画面で表示が崩れる

余計な </div> が入っていることが原因。
バグレポートはなされているので次期アップデート時に対応できるとのこと。

参考:Makes the admin footer appear over the post-text editor · Issue #115 · rajasekharan/WP-Autoresponder

これも7ヶ月前のものなので、今すぐ何とかしたいという場合は customizeblogemail.php の260行目付近の </div> を消すかコメントアウト(HTMLで)すればOK。

日本語で使いたい

マルチバイト対応できるようには計画しているようなので、それを待ってから日本語化すれば使えそう。

参考:Multi-language support · Issue #79 · rajasekharan/WP-Autoresponder

メールが送信されない(FAQより)

2つの原因がありそうです。

WordPress はサーバの cron 設定を行なうわけではなく、アクセスによって擬似的に cron を動かしています。つまり、アクセス(トラフィック)が少なければ動作しません。これを解決するためには、WPをインストールしたディレクトリにある wp-cron.php を cron ジョブに設定してください。

もうひとつは、メールの送信制限がかかっている場合があります。「Newsletters」>「Settings」から1時間あたりに送信できるメールの数を設定できます。デフォルトでは100になっていますが、0(無制限)にするか数値を上げてみてください。