log

WordPress で jquery.ajax-combobox の選択肢が表示されないときの回避策

WordPress で作られたサイト上で jquery.ajax-combobox を使ってコンボボックスを配置すると、選択肢を表示するためのポップアップが表示されない。

なんで表示されないのかというと、ポップアップ部分に振られてる ac_results という class 属性値が WordPress 本体に含まれている CSS でも使われていて、意図しないスタイルが適用されてるから。

なので、WordPress 側のスタイルを上書きする CSS を書くか、jquery.ajax-combobox で ac_results を使わないようにすると回避できる。意図しないスタイルがどれなのかを調べるのは困難を究める作業となってしまうので、ここは JS と CSS 両方の「ac_」を置換して「ajaxcombobox_」という超長い名前に変える方法で回避した。

 

確認時点の環境

jquery.ajax-combobox の GitHub

https://github.com/sutara79/jquery.ajax-combobox

WordPress の jQuery をオリジナルの jQuery に差し替える

WordPressjQueryprototype.js との併用で問題を起こさないようにしてるのか、jQuery で $ を使わないようにしている。そのため、WordPress で生成されるページ上の $ は jQuery ではない。どうやって使わないようにしているのかというと、元の jQuery をいじって、そのいじった jQueryWordPress に含めて配布している。

これだと、$ が jQuery であることを前提としたJavaScript のライブラリが動かないので、互換性とかどうでもいいから $ を jQuery にしたいということがある。

その場合、いじる前のオリジナルの jQuery を使うようにすればいい。じゃあどうすればいいかというと、以下のコードを functions.php とかに書けば、WordPress が使用している jQuery と同じバージョンのオリジナルの jQuery を CDN から持ってこれます。

add_action( 'wp_enqueue_scripts', 'change_to_original_jquery' );
function change_to_original_jquery() {
    global $wp_scripts;
    $jquery_version = $wp_scripts->registered['jquery']->ver;
    wp_deregister_script( 'jquery' );
    wp_enqueue_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/' . $jquery_version . '/jquery.min.js', array(), $jquery_version );
}

一応注意としては、上記のコードはフロントページだけにしか作用しないので、管理画面では $ は jQuery じゃないままです。今のところ私は必要ないので、管理画面でも動くコードは載せれないです。

Windowsのソフトウェア環境

Synergy

LAN 内でキーボードとマウスの入力を共有する。クリップボードも共有されるが、不安定だったり、サーバーからクライアントへの片方向だけだったりで使いものにならないので、それは別のソフトで補う。

ClipLanW

LAN 内でクリップボードを共有する。「IP クリップボード」というソフトも試してみたが、Synergy との併用だと不安定だったのでこれにした。

BitTorrentSync

異なるデバイス間で、設定したディレクトリ内のファイルとディレクトリを同期する。LAN 内だけに関わらず、別のネットワークとも、モバイルとも同期できる。

「あのファイルどこだっけなー? あ、そっちのパソコンか」ってなって、ネットワーク一覧からコピーしてきたり、Bluetooth で転送してきたりっていう日常のめんどくささを解消する目的と、軽いバックアップ的な目的で使うソフト。

WP Video Posts プラグインを入れてる状態で、管理画面でカスタム投稿タイプの一覧が表示されないとき

件数は合ってんのに一覧が表示されないなーっていう状況が解決したのでメモ。

ログやソースコードを追っかけてみると、/wp-includes/query.php で定義されてる get_posts() 関数の中から呼ばれる pre_get_posts アクションの直後、クエリーの post_type の値が post と video になってた。直前まで post_type の値はカスタム投稿タイプのものになってたので、なんかのフィルターが悪さしてるんだなーと思い、pre_get_posts に登録されている関数を調べてみると、なんかよくわかんないやつと WP Video Posts プラグインが登録したであろう関数があった。で、WP Video Posts プラグインソースコードから関数を探してみると、どうやら wpvp_main_loop_alter というオプションの値が true のときだけ、post_type の値を変更しているみたいだった。

というわけで管理画面 > 設定 > WP Video Posts を開くと、display the video posts というそれっぽい設定があったのでチェックボックスを外してみた。無事に一覧が表示されました。おわり。

post_row_actions - 管理画面の投稿一覧における、各行の「編集」などの HTML

WordPress のバージョン
3.8.2
フィルター名
post_row_actions
引数
$actions
以下は日本語環境下で出力したログです。
Array
(
    [edit] => <a title="この項目を編集" href="http://XXX">編集</a>
    [inline hide-if-no-js] => <a class="editinline" title="この項目をインラインで編集" href="#">クイック編集</a>
    [trash] => <a class="submitdelete" title="この項目をゴミ箱へ移動する " href="http://XXX">ゴミ箱</a>
    [view] => <a title="“タイトル” を表示" href="http://XXX" rel="permalink">表示</a>
)
メモ
このフィルターはカスタム投稿タイプの一覧画面でも実行されます。

comment_form_defaults - コメントフォームの HTML

WordPress のバージョン
3.8.2
ソースファイル
/wp-includes/comment-template.php
フィルター名
comment_form_defaults
引数
$defaults
以下は日本語環境下で出力したログです。
Array
(
    [fields] => Array
        (
            [author] => <p class="comment-form-author"><label for="author">名前</label> <input id="author" name="author" type="text" value="" size="30" /></p>
            [email] => <p class="comment-form-email"><label for="email">メールアドレス</label> <input id="email" name="email" type="email" value="" size="30" /></p>
            [url] => <p class="comment-form-url"><label for="url">ウェブサイト</label> <input id="url" name="url" type="url" value="" size="30" /></p>
        )

    [comment_field] => <p class="comment-form-comment"><label for="comment">コメント</label> <textarea id="comment" name="comment" cols="45" rows="8" aria-required="true"></textarea></p>
    [must_log_in] => <p class="must-log-in">コメントを投稿するには<a href="http://XXX">ログイン</a>してください。</p>
    [logged_in_as] => <p class="logged-in-as"><a href="http://XXX">root</a> としてログインしています。<a href="http://XXX" title="このアカウントからログアウトする">ログアウトしますか ?</a></p>
    [comment_notes_before] => <p class="comment-notes">メールアドレスが公開されることはありません。</p>
    [comment_notes_after] => <p class="form-allowed-tags">次の<abbr title="HyperText Markup Language">HTML</abbr> タグと属性が使えます:  <code><a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> </code></p>
    [id_form] => commentform
    [id_submit] => submit
    [title_reply] => コメントを残す
    [title_reply_to] => %s にコメントする
    [cancel_reply_link] => コメントをキャンセル
    [label_submit] => コメントを送信
    [format] => xhtml
)
「XXX としてログインしています。ログアウトしますか ?」を消す例
add_filter( 'comment_form_defaults', function ( $defaults ) {
    error_log( print_r( $defaults, true ) );
    unset( $defaults['logged_in_as'] );
    return $defaults;
} );

Windows で環境変数 Path の編集がコマンドプロンプトに反映されない

最近、コンパネからシステム環境変数の Path を弄ってパスを追加しても、コマンドプロンプトに反映されなくて困ってた。

でも管理者権限でコマンドプロンプトを立ち上げると反映されてるので、とりあえずそうしてたんだけど、めんどくさいからちょっと調べてみた。

 

結論からいうと Orchis を再起動すると反映される。

なんか Windows環境変数はプロセスが生成されるときに割り当てられるらしくて、しかもそれは親から引き継がれるらしい。んで Orchis からコマンドプロンプトを立ち上げてたもんだから、Orchis に割り当てられてた環境変数コマンドプロンプトにも引き継がれてしまってたみたい。

詳しい話は調べないで書いてるから間違ってるかもしんないけど、パス通せるようになったからいいや。