カテゴリ: WordPress
投稿者: mio
Wordpressのお問い合わせフォームプラグイン「 Contact Form 7 」で、2重投稿を防ぐ目的で、on_sent_ok を使って、Thank youページへ飛ばそうとしていたのですが、なぜかJSが動いていないことに気づいて、変だなーと思っていたら、

wp_footer();

footer.php に書いていないことが原因でした。


Contact Form 7 では、
wp_head()
でCSSと、jQueryを、

wp_footer()
で、フォームを制御する js を読み込んでいるようで、
この wp_footer() を実行しないと、
on_sent_ok で設定する jsが実行されないということが分かりました。


おそらく、Google Analyticsが動かないとか、色々言っている皆さんはだいたい、wp_footer(); が抜けてるのでは?と思いました。



他のプラグインでも、同じ原因で動かなくなることもあるかもなので、テーマを自作している人は注意ですね。
カテゴリ: WordPress
投稿者: mio
以下のように書けば、header.php などで、wp_headを実行する前に、wp_deregister_script('jquery')と書けば
jQueryだけ、wp_headの読み込みから削除できます。

<?php wp_deregister_script('jquery'); ?>
<?php wp_head(); ?>
カテゴリ: WordPress
投稿者: sagawa
wordpressループ内の記事内容をどのような順番で表示するかを設定する際には、query_posts関数内の"orderby=〇〇"という引数で、どのような記事が表示されるかを決めます。

例えばタイトル順で並べたいときには、

"orderby=title"

といった具合です。


今回、スラッグの順番で並べ替えたかったのですが、

"orderby=slug"

などとやっても、全く並べ替えてくれませんでした。

ではどうしたらいいのか。

結論から言いますと、スラッグで並べ替えることはできないようです。


ですので、この"orderby"の仕様の部分を書き換えてみました。
とっても簡単です。
(以下は、最新版のwordpress3.2.1を元にしています。)


wp-includes/query.phpの2320行目を書き換え

$allowed_keys = array('author', 'date', 'title', 'modified', 'menu_order', 'parent', 'ID', 'rand', 'comment_count');

$allowed_keys = array('author', 'date', 'title', 'modified', 'menu_order', 'parent', 'ID', 'rand', 'comment_count' , 'slug');


同ファイルの2354行目に下記を追加

case 'slug':
$orderby = "$wpdb->posts.post_name";
break;


たったのこれだけで、

"orderby=slug"

が使用可能になり、
スラッグ順に投稿を表示できるようになりました。
カテゴリ: WordPress
投稿者: mio
WordPressのビジュアルリッチエディタは、どうでもいいところにpタグが入ったり、たくさん改行したいのにできなかったり、編集して保存したら、全然違う見た目になってたり、本当に使いにくすぎる。

ということで、pタグの自動挿入機能を切る方法を調べました。
結構面倒だったので、同じ悩みを抱える人のため、自分のために、まとました。
プラグインや設定ファイル一発で変えられたらいいのですが、うまいやり方が見つかりませんでした。もし、何か簡単な方法をご存知の方がいらっしゃいましたら、是非コメントなどでお知らせください。

ちなみに、WordPressのバージョンは、
ME2.2.3 です。

編集しなければならないファイルは2つ。
1つずつ説明します。


■tiny_mce.js

wp-includes/js/tinymce/tiny_mce.js
にある、ファイルを編集します。
ビジュアルリッチエディタの要の部分です。

handleEvent : function(e) という関数(メソッド?)の中にある
// Insert P element instead of BR


上記記述がある部分をまずコメントアウト。
1000行目〜1500行目あたりに、3箇所ぐらいありました。

キー入力を、switch文で振り分けているところで、
if ((tinyMCE.isGecko || tinyMCE.isOpera || tinyMCE.isSafari) && tinyMCE.settings['force_p_newlines'] && e.keyCode == 13 && !e.shiftKey) {

みたいな条件が書かれているあたりです。
上記条件ごとコメントアウトしてOK。

ちなみに、「 Insert P element instead of BR」の記述がある部分は、isGecko、isOpera、isSafariという条件にあるように、IE以外のブラウザでのみ有効なので、IEの方のプログラムも変えます。

それが、
if (tinyMCE.isIE && tinyMCE.settings['force_br_newlines'] && e.keyCode == 13)

という条件がある部分で、
tinyMCE.settings['force_br_newlines']をtrueに設定する必要があるのですが、これを設定する場所を探すよりも、ここの条件を常にtrueにしてしまうほうが楽なので、ここの条件を変えてしまいます。
if (tinyMCE.isIE && e.keyCode == 13)

↑こんな感じ。

あと、
if (tinyMCE.isIE && e.type == "keydown" && e.keyCode == 13)
if (tinyMCE.isIE && e.type == "keyup" && e.keyCode == 13)

の条件の中での処理もコメントアウトします。

※e.keyCode == 13 は、エンターキーのことです。

以上で javascript で編集時に、自動的に

タグが入らないようになります。



■formatting.php

wp-includes/formatting.php
に、あるファイルを編集します。



ここでは、DBから読み取ったテキストデータをビジュアルリッチエディタ用のデータにフォーマットする関数をいじくります。放っておくと、ここでもpタグがPHPによって勝手に入れられてしまいます。
ここでは、wpautop という名前の関数を編集します。

コメントアウトするのは以下の記述

$pee = preg_replace("/\n\n+/", "\n\n", $pee); // take care of duplicates

$pee = preg_replace('/\n?(.+?)(?:\n\s*\n|\z)/s', "<p>$1</p>\n", $pee); // make paragraphs, including one at the end

$pee = preg_replace('!<p>([^<]+)\s*?(</(?:div|address|form)[^>]*>)!', "<p>$1</p>$2", $pee);


あと、
$pee = preg_replace('|(?<!<br />)\s*\n|', "<br />\n", $pee); // optionally make line breaks


$pee = str_replace("\n", "<br />\n", $pee);

とします。

以上です!
ここまで調べるのに数時間かかりました。(笑


とか、書いてたら、formatting.php周辺の記事が出てきたり。。(笑
http://web-pallet.com/a-blog/tb.php?ID=172
http://camcam.info/wordpress/224

あ、よく見たら、camcamさんの、brBrbrというプラグインは前から使ってました。ので、これもインストールしておいたほうがよさげですね。新しい記事(上記URL)もありましたし。要チェックです。