カテゴリー
WordPressのこと

WordPressで身に覚えのない新規ユーザーが登録されてしまう【スパム】

ある日、WordPressからメールが飛んできたのですが…。

 

件名:[(サイト名)] 新規ユーザー登録

本文:
サイト「(サイト名) 」の新規ユーザー登録:
ユーザー名: ●●●●●●●●●●●
メールアドレス: ●●●●●●●●●●●●@●●●●●●●●.com

 

まったく身に覚えがありません。
こんな時はすぐに管理画面を確認しましょう。

管理画面にはいったら、

設定 → 一般

へと進み、

メンバーシップ

という項目のチェックを確認しましょう。

 

だれでもユーザー登録ができるようにする

というチェックがONになっていませんか?

ここがチェックONになっていると、
WordPressのURLの末尾に続けてある文字列を打つことで、
誰でもユーザー登録ができてしまうのです。
(会員制サイトなど、使いみちはいろいろあるようです)

さて、ここをOFFにしたら、
登録されてしまったユーザーをチェックしましょう。

ユーザー → ユーザー一覧

へと進み、
不要なユーザーを削除しましょう。

すぐに削除できない事情や、確認に時間を要する場合は、
取り急ぎ「権限グループ」と「パスワード」を変更してしまいます。

権限グループ:このサイトでの権限なし、を選択
パスワード:変更してしまう

▼修正箇所

 

放置しておくと、身に覚えのないユーザーはどんどん増えていきます。
可能な限り速やかに対処しましょう。

 

▼参考サイト様:

WordPress スパムユーザーが購読者として自動で追加される場合の対処方法

カテゴリー
WordPressのこと

HTMLエディタによる自動整形の影響 2016年版(デフォルト編)

管理画面の本文エリアで、HTMLエディタ(テキストタブ)でコーディングをしたとき。
保存したとたんにタグがとんだりして困ったことはありませんか?

honbun_area

2012年頃は、自動整形の影響でタグが消えたりid属性が消えてしまい調整に苦心しましたが、あれから4年たった今、自動整形事情はどうなっているのでしょう。

調整して自動整形の影響を消す前に、そもそもWordPressのデフォルトとしてはどうなっているのか?をまず確認してみました。

検証環境

  • WordPress:ver.4.6.1(テーマ:Twenty Sixteen)
  • OS:Mac OSX 10.9.5
  • 使用ブラウザ:FireFox 48.0.1
  1. HTMLエディタに検証コードを流し込む
  2. ビジュアルエディタに切り替えて更新
  3. プレビューし、ソースを表示させたものを検証

検証項目

  1. 全プラグイン停止(これをデフォルトとする)
  2. functions.php への書き込みなど一切なし

※上記に関して「管理者」「編集者」「投稿者」それぞれで検証手順にそって検証コードを編集しソースを取得。

検証コード

<h1>自動整形検証コード</h1>

<h2>pタグ</h2>
<p>pタグが消えないかどうか</p>

<h2>行頭一字空け</h2>
<p> 行頭一字空けを全角アキで確保できるか</p>

<h2>改行タグ</h2>
<p>XHTMLの改行タグ<br />が消えないかどうか</p>
<p>HTML5の改行タグ<br>が消えないかどうか</p>

<h2>連続改行</h2>
<p>XHTMLの改行タグによる<br /><br /><br />3連続改行</p>

<h2>空タグ</h2>
<p id="test_id02"></p>
<div id="test_id01"></div>

<h2>id属性とclass属性</h2>
<p id="test_id">id属性が消えないかどうか</p>
<p class="test_class">class属性が消えないかどうか</p>

<h2>rel属性</h2>
<img src="example.jp" rel="example" alt="example" />

<h2>clear属性</h2>
<br clear="all">

<h2>ul中にclear属性</h2>
<ul>
<li>あいうえお</li>
<li>かきくけこ</li>
<br clear="all">
</ul>

<h2>スタイル直書き</h2>
<p style="margin-top:30px;padding-bottom:20px;">直書きしたスタイル属性が消えないかどうか</p>

<h2>コメントアウト</h2>
<p>段落中の<!--コメントアウト-->が消えないかどうか</p>
<!--段落外のコメントアウトが消えないかどうか-->

<h2>テーブル</h2>
<table>
<tr>
<th style="width: 120px;" scope="row">テキスト</th>
<td>テキストテキスト</td>
</tr>
</table>

<h2>imgタグ</h2>
<img src="example.jp" alt="example" />

<h2>iframe</h2>
<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.co.jp/maps?f=q&amp;amp;source=s_q&amp;amp;hl=ja&amp;amp;geocode=&amp;amp;q=%E6%9C%AD%E5%B9%8C%E9%A7%85&amp;amp;aq=&amp;amp;sll=43.437574,142.851354&amp;amp;sspn=4.155917,7.734375&amp;amp;brcurrent=3,0x5f0b29a33b13e82f:0xb96643d25f25d813,0&amp;amp;ie=UTF8&amp;amp;hq=&amp;amp;hnear=%E6%9C%AD%E5%B9%8C%E9%A7%85%EF%BC%88%E5%8C%97%E6%B5%B7%E9%81%93%EF%BC%89&amp;amp;t=m&amp;amp;z=14&amp;amp;ll=43.068625,141.350801&amp;amp;output=embed">インラインフレーム非対応ブラウザへのメッセージ</iframe><br /><small><a href="http://maps.google.co.jp/maps?f=q&amp;amp;source=embed&amp;amp;hl=ja&amp;amp;geocode=&amp;amp;q=%E6%9C%AD%E5%B9%8C%E9%A7%85&amp;amp;aq=&amp;amp;sll=43.437574,142.851354&amp;amp;sspn=4.155917,7.734375&amp;amp;brcurrent=3,0x5f0b29a33b13e82f:0xb96643d25f25d813,0&amp;amp;ie=UTF8&amp;amp;hq=&amp;amp;hnear=%E6%9C%AD%E5%B9%8C%E9%A7%85%EF%BC%88%E5%8C%97%E6%B5%B7%E9%81%93%EF%BC%89&amp;amp;t=m&amp;amp;z=14&amp;amp;ll=43.068625,141.350801" style="color:#0000FF;text-align:left">大きな地図で見る</a></small>

<h2>HTML5のタグ</h2>
<section>セクション</section>
<nav>ナビゲーション</nav>
<article>アーティクル</article>
<aside>アサイド</aside>
<header>ヘッダー</header>
<footer>フッター</footer>
<address>アドレス</address>

 

[検証結果]

WordPress ver.3.4.2と比べ、基本は変わっていない状態。

■管理者

ver.4.6.1 ver.3.4.2  er.4.6.1についての備考
pタグ 消えない 消えない ※管理画面内では非表示だが、htmlソース上には存在する。
行頭一字空け 不可 不可  ※全角スペースが消失
改行タグ  消えない 消えない ※管理画面内では非表示だが、htmlソース上には存在する。
※XHTML用の改行タグに置き換わる
連続改行  不可 不可  ※連続して改行タグを入れても1つ分しか有効にならない
空タグ(p)  消失 消失
空タグ(div)  消えない 消えない
id属性  消えない 消えない
class属性  消えない 消えない
rel属性  消失 消失
clear属性  消失 消失 brタグはpタグに代わり、&nbsp;をはさんだ状態
clear属性(ul内)  消失ほか 消失ほか brタグは消失、ulタグがさらにulタグで囲まれ、最下行にp空タグ出現
スタイル直書き  消えない 消えない
スタイル直書き
(th内)
 消えない 消えない
コメントアウト
(タグ外)
 見える 見える ※pタグで囲まれるため、コメントアウトが表示されてしまう
コメントアウト
(タグ内)
 OK OK
テーブル  消えない 消えない ※<tbody>を強制的に入れられる
iframeタグ  消えない 消えない ※pタグで囲まれる※widthやstyleなどの属性値の位置が変わる
HTML5タグ  消えない 消えない
imgタグ  消えない 消えない ※消えないが<p>タグに囲まれてしまう

■編集者

管理者との差分なし。
※ver 3.4.2では「id属性」「スタイル直書き (th内)」「iframe」が消失していた

■投稿者

管理者との差分のみ記載。

ver.4.6.1 ver.3.4.2 ver.4.6.1についての備考
id属性 消えない 消失
スタイル直書き
(th内)
消えない 消失  ※スタイル記述中、不要な末尾の「;」が消失
iframe 消失 消失 ※iframeタグが消失

 

【まとめ】

権限の違いによる自動整形の影響については、編集者が格上げ(?)されて管理者と同じ挙動となりました。が、投稿者ではまだ消失するものがありますし、全権限ではコメントアウトが消失します。

  • コメントアウトは消失するので注意
  • iframeタグは、投稿者権限では消失するので注意

しかし、編集者、投稿者でもid属性が消えなくなったのは大きな進歩です!
これで、
制作会社が「管理者」権限で制作 →  納品後、お客様が「投稿者」権限で更新しようとして管理画面をひらき編集  →  idが消失して表示崩れ……の悪夢のパターンがなくなりました。
(納品前に投稿者権限で検証しなかったのも問題ではありますが)

本文エリアでコーディングをするのは個人的には反対なのですが、お客様の要望として
「少しくらいの修正なら自分たちでやれればいいな…」
というのは心情としてもよくわかります。

できること・できなことをよく把握して、無理のない範囲で要望に応えていけるのが良いのかなと思っています。

 

カテゴリー
WordPressのこと

ビジュアルリッチエディタが表示されない!

ビジュアルリッチエディタが表示されない。
ちなみにビジュアルリッチエディタというのは、 管理画面の本文を入力するエリアの「ビジュアルタブ」がONになっている状態のことを指します。

【ビジュアルリッチエディタの正常な状態 ↓ 】

ビジュアルリッチエディタ

これがなぜか表示されず、「HTMLタブ」だけだったり、

【HTMLタブだけ ↓ 】

HTMLタブしか表示されない状態

「ビジュアルタブ」も「HTMLタブ」もおかしかったり、

【両方おかしい ↓ 】

不具合が起きることは、わりとあります。 私が出会った事例と解決策を書いてみたいと思います。

HTMLタブだけ の場合

これは不具合ではなく設定の可能性が大です。 管理画面の「ユーザー」→「あなたのプロフィール」の設定画面に「ビジュアルリッチエディターを使用しない」というチェック項目があるのです…。

あなたのプロフィール設定画面

なんですかこれは…。ビジュアルリッチエディターがないほうが良いシチュエーションもあるのでしょうか。あまり使わないような気が(個人的に)。

これ、気づかずに30分くらい悩みました。 知らないって怖いですね。

両方おかしい場合

「ビジュアルタブ」も「HTMLタブ」も表示がおかしい。各種ボタンが表示されない。編集エリア内に文字を打ち込めているのかどうか見えない…。

かなりあせる状態です。

結論からいうと、「wp-includes」ディレクトリ内の「js」ディレクトリ内にある「tinymce」あたりが原因です。cdWordPressの本家サイトから新たにダウンロードし直して、この「tinymce」フォルダだけまるごと入れ替えてしまいましょう。

この不具合は、別の場所で一度構築したWordPressを使った場合に頻発します。 別環境で一度構築したものを本番で流用した、あるいはサーバ間の移行をした場合など。

時間がない時に不具合で足止めされるなんて、なんとしても避けたいところです。

人気記事

カテゴリー
テンプレートタグ

the_time()

現在の投稿の公開時刻を表示します。

位置

ループ内

引数

様々な様式で、時刻だけでなく西暦、年、月、日を表示させることができます。
詳しくは、Codex「日付けと時間の書式」へどうぞ。

コード記述例

基本の記述

<?php the_time(); ?>  →  12:09 AM
<?php the_time('Y年n月j日 l'); ?>  →  2008年4月1日 火曜日
<?php the_time('Y.m.d'); ?>  →  2015.03.09
カテゴリー
テンプレートタグ

query_posts()

WordPress ループ で表示される投稿を変更するために使います。
私の場合、一番お世話になっているタグです。グローバル変数$wp_queryを書き換えてしまうので、ループの最後でリセットするのを忘れずに。
リセットをしないと、あとに続くループの挙動がおかしくなります。

※query_posts() 関数はメインの WordPress ループだけを変更するためのものです。新たなループを作るためのものではありません。メインループの他にループが必要な場合は、get_posts() を使ってください。

意外な感じがするのですが(私だけかも?)、query_posts()で固定ページもひっぱれます

位置

ループの前

引数

普段あまり使わないけれど便利なものだけピックアップします!

  • post_status…ステータス・公開状態で引っ張れます。
    例)post_status=private
    …非公開記事

その他はCodexへどうぞ。

コード記述例

基本の記述

<?php query_posts('引数'); ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
//ここに表示したい内容を入れる
<?php endwhile; endif; ?>
<?php wp_reset_query(); ?>

 

 

投稿のカテゴリースラッグがaaaの記事を表示する

<?php query_posts('category_name=aaa'); ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
//ここに表示したい内容を入れる
<?php endwhile; endif; ?>
<?php wp_reset_query(); ?>

 

 

投稿のカテゴリースラッグがaaaまたはbbbまたはcccのとき、999個まで記事を表示する

<?php query_posts($query_string . "cat=" .(get_category_by_slug('aaa')->term_id .",".get_category_by_slug('bbb')->term_id .",".get_category_by_slug('ccc')->term_id) . "&showposts=999"); ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
//ここに表示したい内容を入れる
<?php endwhile; endif; ?>
<?php wp_reset_query(); ?>

 

 

固定ページをだす

<?php query_posts('post_type=page'); ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
//ここに表示したい内容を入れる
<?php endwhile; endif; ?>
<?php wp_reset_query(); ?>

 

 

固定ページでページング

<ul>
<?php
global $paged;
query_posts('category_name=example&showposts=3&paged=' . $paged); ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; endif; ?>
<?php posts_nav_link(' | ','前の記事','次の記事'); ?>
<?php wp_reset_query(); ?>
</ul>

 

 

カスタム投稿タイプ「aaa」または「bbb」でカスタムフィールドのKeyが「xyz」の記事を表示

<?php
$args = array(
'post_type' =&gt; array('aaa','bbb'),
'meta_key' =&gt; 'xyz',
);
query_posts($args); ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
//ここに表示したい内容を入れる
<?php endwhile; endif; ?>
<?php wp_reset_query(); ?>
カテゴリー
WordPressのこと

テンプレート階層図解を改良しました

文字が小さく見づらかったので、すこし大きく見やすく改良。

テンプレート階層図解
クリックで拡大します。
カテゴリー
テンプレートタグ

wp_dropdown_categories()

カテゴリーリストを出す際、ドロップダウンにする必要のある案件に出くわしました。
これは、wp_list_categories()をつかってfor文…いやforeach文!?などと考えつつ調べていたら、こんな便利なタグがありました。何でもそろってるなぁWordPress…。

ちなみに「カテゴリー」ではなく「投稿の月別アーカイブ」へのリンクをドロップダウンにするときはwp_get_archives()をつかいます。

引数

Codexへどうぞ

コード記述例

<form action="<?php echo get_home_url(); ?>" method="get">
<?php wp_dropdown_categories(); ?>
<input type="submit" name="submit" value="GO" />
</form>

 

カテゴリー
WordPressのこと

構築中に突然、NotFound や InternalServerError になったら…。

構築中にサイトがNotFound や InternalServerErrorになってしまった。
親ブログは大丈夫だけれど、子ブログへ行けない…などなど。

謎のURLがらみのトラブルは、htaccessを疑ってみるのが近道かもしれません。

直前にどんな操作をしましたか?正しく書けているでしょうか?
確認してもエラーがなおらない場合は…さらにエンコーディングまわりも疑ってみましょう。

エンコーディング 改行コード BOM 表示結果
SHIFT JIS CR なし NotFound
SHIFT JIS CR+LFまたはLF なし OK!
UTF-8 CR なし NotFound
UTF-8 CR+LFまたはLF なし OK!
UTF-8 CR+LFまたはLF あり InternalServerError

htaccessは、UTF8のBOMなしで書きましょう。
改行コードはCRがNGのようです。

Windowsの方はメモ帳を使うとBOMが入ってしまうので気をつけてください。
Dreamweaverをお使いの方は、画面上部「修正」→「ページプロパティ」でエンコーディングが修正できます。
くれぐれもBOMにチェックは入れないように…。

ページプロパティウィンドウ見本

「NotFound 」「 InternalServerError」が画面に表示されている状態というのは結構あせりますが…、落ち着いて復旧にのぞみましょう!

 

さて、上記を確認しても大丈夫なのに、
子ブログを作ろうとしたら「サイトのアドレスがないか、または間違っています。」と出てしまって先へ進めない…。

そんな時は子ブログのサイトのアドレスを確認してみましょう。
アンダーバー「_」が入っているとNGです。私はこれを知らずに結構悩みました(^^;)

カテゴリー
テンプレートタグ

get_permalink()

記事のパーマリンクをPHPの値として返します。echo で出力させることもできます。
the_permalink()との違いは、引数として記事のIDを使える点です。

位置

ループ内・外

引数

  • id (整数)- 記事の数字ID。ループ内で使用した場合、デフォルト値は表示中記事のID。

コード記述例

<p><a href="<?php echo get_permalink(5); ?>">記事ID5へのリンク</a></p>

 

カテゴリー
WordPressのこと

カスタムフィールドで入力した数字に自動でカンマを入れるには

価格など、数字の百の位と千の位の間にカンマをいれたいとき、ありますよね。

eer

この数字をカスタムフィールドで入力出来るようにした場合、このカンマが自動で入ってくれなくて困ったことはありませんか?

type=text で作ったカスタムフィールドの入力エリアに「5324」と入れても、
ユーザー画面には「5324」と、そのまま出てしまう。

rrrr

 

そんな時には、PHPの関数「number_format()」を利用すればOKです!
カスタムフィールド取得の関数「get_post_meta()」を
更に囲むかたちで使用します。

コード記述例

カスタムフィールドのKeyが”price”の場合

<?php echo number_format(get_post_meta($post-&gt;ID,’price’,true));?>

便利ですね〜。