タグ:WordPress

初期テーマの設定【WordPress】

WordPressの初期テーマは、「twentyxxxx」のような、最初から入っているテーマに設定されています。

これはこのテーマを削除しても、インストール直後はそのテーマが選択されている状態となります。

1サイト・1Wordpressなら、特に初期テーマは気にしなくてもよいのですが、マルチサイト化する場合は、初期テーマを任意のものにしたい、かもしれません。どのサイトもテーマを統一したいのに追加するたびに、テーマを選択しなくてはなりませんからね。

ということで、Wordpress本体の中から、設定されている場所を探します。

wp-includes/default-constants.php

の中に、

define( 'WP_DEFAULT_THEME', 'twentyfourteen' );

という記述があります。

これがテーマの初期設定です。

これを変えれば、初期テーマを変えることができるのですが、Wordpressをアップデートするたびに修正するのは面倒なので、wp-config.phpにこれを追記します。

define( 'WP_DEFAULT_THEME', 'xxxxxxxx' );

xxxxxxxxには、初期テーマにしたいテーマのフォルダ名を記述してください。

これで、こちらの設定が優先されます。

nandani | 2014年09月12日 | コメント(0) | トラックバック(0) | CMS関連

固定ページの子ページを表示するショートコード【WordPress】

開いた固定ページの子ページが、自動的にリスト表示されるようにしたい場合、wp_list_pagesをショートコードにしてしまうと便利です。

functions.phpに下記を追記します。

function pageChild() {
	global $post;
	
	$args = array('depth'        => 0,
		'show_date'    => NULL,
		'date_format'  => get_option('date_format'),
		'child_of'     => $post->ID,
		'exclude'      => NULL,
		'include'      => NULL,
		'title_li'     => '',
		'echo'         => 0,
		'authors'      => NULL,
		'sort_column'  => 'menu_order, post_title',
		'link_before'  => '',
		'link_after'   => '',
		'exclude_tree' => '' ); 
	
	$return = '<ul class="page_child">';
	$return .= wp_list_pages($args);
	$return .= '</ul>';
	
	return $return;
}
add_shortcode('page_child', 'pageChild');

子ページ持ちの固定ページに

[page_child]

と記述すると、その子ページがリスト表示されるようになります。

関数自体はなんてことないものですが、ショートコードって便利ですね。

nandani | 2014年06月11日 | コメント(0) | トラックバック(0) | CMS関連 | PHP関連

get_postsで取得したデータでも、ショートコードを実行する【WordPress】

メモ。

the_content()で表示した「内容」ならば自動的にショートコードが実行されるのですが、get_postsで取得した記事の「内容(例えば$hoge->post_content)」では、ショートコードが実行されません。

そのままショートコードが表示されてしまいます。

そういう場合は、do_shortcode関数を使用しましょう。

do_shortcode($hoge->post_content);

これで、内容中に含まれるショートコードが実行されるようになります。

なお、get_the_content()でも同様にショートコードが実行されませんので同じく

do_shortcode(get_the_content());

としてください。

参考サイト

WordPress: フィルターより前にショートコードを実行させる | 半月記 @ 半月記半月記

do_shortcode:WordPress私的マニュアル

nandani | 2013年06月21日 | コメント(0) | トラックバック(1) | API関連 | CMS関連

pre_get_postsを使う場合は、管理画面にまで反映してしまわないよう注意

WordPressメモ。

サイトの検索にて、post_typeを絞ろうと、functions.phpに

function include_post_type($query) {
	if ($query->is_search()) {
		$query->set('post_type', array('post','xxx','xxx'));
	}
}
add_action( 'pre_get_posts', 'include_post_type' );

と記述したのですが、管理画面の検索にまでこれが反映されてしまいました。

正確には

function include_post_type($query) {
	if (!$query -> is_admin && $query->is_search()) {
		$query->set('post_type', array('post','xxx','xxx'));
	}
}
add_action( 'pre_get_posts', 'include_post_type' );

というように、「!$query -> is_admin」も必要だったみたいですね。

いきなり管理画面の検索がおかしくなったからあせったわ~^^;

 

参考サイト

query_postsを捨てよ、pre_get_postsを使おう【追記あり】【報告あり】 | notnil creation weblog

nandani | 2013年06月18日 | コメント(0) | トラックバック(0) | CMS関連

入力フィールドを複数追加できるタイプのカスタムフィールドを扱う際の注意点

Custom Field Templateプラグインを使用すると、投稿時に入力フィールドを任意に増やせるカスタムフィールドを作ることが出来ます。

↓こういうの

WS000013

追加ボタンを押すことで、フィールドを増やしていけるわけですが、入力はともかく、取り出し方には注意が必要です。

通常、カスタムフィールドを取り出す場合

<?php $meta_values = get_post_meta($post_id, $key, $single); ?>

$post_id:投稿ID
$key:カスタムフィールド名
$single:取得方法。配列ならfalse、1つめだけならtrue

というふうに取り出すのですが、これで取り出すと、複数フィールドの並び順がばらばらで取得されてしまいます。

しかも投稿を編集するたびに並び順が変わるという困った状態に。

なぜ上から順に取り出してくれない・・・

ということで、検索したところ、こちらの方法で解決しました。

Custom Field Template(カスタムフィールドテンプレート) | WordPress 編

複数フィールドを上から順に取り出す場合はsqlをつかって取り出します。

複数フィールドのカスタムフィールド名が「Hoge」とした場合


<?php
global $wpdb;
$query = "SELECT * FROM ".$wpdb->postmeta." WHERE post_id = ".get_the_ID()." AND meta_key = 'Hoge' ORDER BY meta_id ASC";
$cf = $wpdb->get_results($query, ARRAY_A);

$Hoge = array();
if($cf){
foreach($cf as $row){
$Hoge[] = $row['meta_value'];
}
}
?>

これで複数フィールドの並び順(meta_id)順でデータを取得することができます。

nandani | 2013年05月18日 | コメント(0) | トラックバック(0) | CMS関連 | PHP関連

【WordPressメモ】カスタムタクソノミーのアーカイブページで、そのページのタクソノミーのスラッグ名を取得する

$term

これだけです。

echo $term;

とすると、タクソノミーのスラッグ名が表示されます。

さらに「get_term_by」を使用すると、そのタクソノミーの情報を取得できます。

$the_term = get_term_by("slug", $term, "タクソノミー名");

うかつに、$termに変数を代入してしまわないよう注意しましょう。

ほかにも、

投稿記事ページで記事の情報を取得できる「$post」

カテゴリーアーカイブページでカテゴリーIDを取得できる「$cat」などがあります。

 

参照サイト

nandani | 2013年03月25日 | コメント(1) | トラックバック(1) | CMS関連

WordPressのセキュリティについて

WordPressをデフォルトの設定で、ゆるゆるのパスワードにしていると簡単に抜かれてしまうということが分かった今日この頃。

ということで、いろいろとサイトを見たり、実践したりしたことをまとめることにしました。

 

門を固める

そもそもログイン画面で敵を止める必要があります。(理想はログイン画面にすら到達できなくすることですが)

 

パスワードの複雑化

パスワードについては最近こんな記事がありました。

2万5000年かかっても破られない究極パスワードの設定方法(1/4) - ウレぴあ総研

どんなものかと思いきや、実は12桁にするだけでまず抜かれないパスワードになるとのこと。(もちろん半角英数字、大文字小文字まぜこぜの辞書アタックにも引っかからない文字列で構成されたものです。)

よく8ケタ推奨といいますが、今では8ケタは危ないらしいです。

12桁だっていずれは危なくなるでしょうが、とりあえず今のところは12桁以上にしておいたほうがよいでしょう。

 

リトライの回数制限を設ける

デフォルトでは、Wordpressは何度でもログインのチャレンジができます。

これではいつか破られるかもしれません。

というわけで、プラグインを使って回数制限を設けましょう。

リトライの回数制限を設けるプラグイン:Limit Login Attempts

指定した回数失敗すると、しばらくログインできなくなり、またそんなことがあった場合メールで知らせてくれたりします。

 

万が一ログインされてしまったら

万が一ログインされてしまった場合でも、被害を最小限に留める必要があります。

 

出力される内容はエスケープする

スクリプトを埋め込まれないよう、よほどコードを書いたりするサイトでない限り、出力されるものはすべてエスケープ処理をしておきましょう。これはテンプレートを地道に編集するしかないです。

もちろん内容フィールドのpタグやaタグなどまでエスケープされては困りますが、scriptという記述を全角に置換したり、strip_tagsで許可したタグのみ出力されるようにすれば、投稿記事に悪意のあるスクリプトを埋め込まれてそのまま出力されると言う心配は少なくなります。

あと、投稿にPHPを書けるプラグインを入れるのも、できるだけやめましょう。

 

テーマを管理画面から編集できなくする

テーマは管理画面から編集できなくしておいたほうが良いでしょう。

通常、メニューの外観>テーマ編集で管理画面からもテーマを編集することができますが、wp-config.phpに

define('DISALLOW_FILE_EDIT', TRUE);

と記述すると、メニューから「テーマ編集」が消え、編集画面が表示できなくなります。

サイト構築中であれば必要かもしれませんが、公開後はそれほど触ることもありませんし、直上げすれば済むことですので、この設定をしておいたほうが良いかと思います。

ちなみにプラグイン編集もできなくなります。

 

プラグインでテーマが正常か確認する

テーマに異常がないか確認してくれるプラグイン:AntiVirus

このプラグインは、手動でもスキャンできますし、設定しておくと1日ごとに定期スキャンをし、異常があったときはメールで知らせてくれるという便利機能まであります。

注意点として、いいね!ボタンなどのiframeにまで反応してしまうので、最初の手動スキャンで個別に許可しておきましょう。

 

その他としては

  • WordPressのバージョンを常に最新にする。
  • プラグインも常に最新のものにする。
  • wp-config.php、htaccessにはアクセスできなくする。
  • 可能であれば管理画面はSSL接続する。
  • 可能であれば管理画面にアクセスできるIPを制限する。
  • WordPressのバージョンを隠す。
  • ユーザー名に「admin」は使わない。ある場合は同権限のユーザーを作って削除するか、通常以上の複雑なパスワードを施す。
  • 定期的にバックアップは取る。
  • 定期的にパスワードを変更する。

といったところでしょうか。

サイトの性質上できないものや、そもそも効果があるのか疑問なものもありますが、やれるものであればやっておいて損はないかと思います。

 

参照サイト

WordPressのセキュリティを徹底強化 | CSSPRO

WordPress のセキュリティ、こんな記事は要注意 | 8bitodyssey.com

WordPressのセキュリティをアップする11のポイント | コリス

nandani | 2013年02月19日 | コメント(0) | トラックバック(0) | CMS関連

カスタムフィールドの値が空だと、meta_queryの条件に引っかからない【WordPress】

バージョンによるバグらしいけど、一応メモ。

「カスタムフィールドテンプレート」で

[test_field]
type=checkbox
value=true

のようなフィールドを追加し、次にテンプレートのquery_postsで

$query = array(
		array(
			'key' => 'test_field',
			'value' => 'true',
			'compare' => '!=',
			'type' => 'CHAR'
		)
	)
);

こんな感じの条件文(つまりtest_filedにチェックが入ってない場合)を書いたところ、一向にヒットしませんでした。
もちろん、チェックが入っていない記事は存在します。

逆に

$query = array(
		array(
			'key' => 'test_field',
			'value' => 'true',
			'compare' => '=',
			'type' => 'CHAR'
		)
	)
);

だと、チェックが入っている記事がちゃんと表示されました。

どうもvalueが空状態だと条件にヒットしなくなるバグが3.1のころにあったみたいです。
それは3.2で正常に戻ったそうなんですが、自分が使っているのは3.4.2・・・
バグ復活といったところでしょうか。

解決方法につきましては、以下のサイトで紹介されておりました。

WordPress3.1系:meta_queryでvalueが空の時の対処法 | ライ麦畑でつかまえられて、思わず出たオナラが案外フローラルだった感動を貴方にも。

他にもラジオボタンやプルダウンにして、絶対に値が入るようにするなどの方法を取るという手もあります。(自分はソースを変えるのが面倒だったので、この方法で回避しました。)

nandani | 2012年12月18日 | コメント(0) | トラックバック(0) | CMS関連

【WordPressメモ】ブログ記事IDからカテゴリー(タクソノミー)情報を取得する

よく使用するけど、よく忘れてしまうやり方のメモ。

ブログ記事IDから、そのブログ記事が所属するカテゴリーの情報を取得する方法です。

通常のカテゴリーならば

$get_the_category = get_the_category("ブログ記事ID");

でOKです。

カスタムタクソノミーの場合は

$get_the_terms = get_the_terms("ブログ記事ID", "タクソノミー名");

となります。

最近はよくカスタムタクソノミーを使うようになったので、これを呼び出す方法を忘れてしまうんですよね~。

 

参考サイト

nandani | 2012年12月13日 | コメント(0) | トラックバック(1) | CMS関連

Copyright(c) 2010 - 2020 ダリの雑記