私は、その機能の一部として、Wordpress管理者の多くのページにThickboxを追加する拡張機能に取り組んでいます。ほとんどのページでこれはうまくいきます - 私はin_admin_footer
を呼び出すためにadd_thickbox
アクションフックを使い、そしてThickboxを含む(include
ステートメントを介して)HTML/Javascriptを含みます。
add_action( 'in_admin_footer', function(){
add_thickbox();
include(__DIR__ . '/includes/thickbox-div.php');
});
私のThickboxのhref
文字列はこんな感じです
#TB_inline?height=480&width=480&inlineId=my_div_id
これはとてもうまくいきます - ほとんどの場合。ただし、いくつかの管理ページ(ダッシュボード、プラグイン)では、Thickboxが大きくなりすぎて、右側の不完全な「閉じる」ボタンが表示されます。
なぜこれが起こるのか、そして修正があれば誰でも知っていますか?私の最初の仮定は、ThickboxをカスタマイズするためにこれらのページでWordpressの中核的なコードが行っていることです - しかし、まだデバッグを始めていないので、確かにそれを知りません。
私は自分自身でコードを回避するための何十もの方法を考え始めることができます - しかし、これを修正するための既知の科学があることを願っています。
少し詳しく説明した後、Wordpressがデフォルトのthickbox実装の振る舞いを変更することになるページがいくつかあるように見えます - これはJavaScriptの変更とカスタムスタイルルールの両方を含みます。あなたはここでこれの例を見ることができます
#File: wp-admin/js/media-upload.js
// thickbox settings
var tb_position;
(function($) {
tb_position = function() {
var tbWindow = $('#TB_window'),
width = $(window).width(),
H = $(window).height(),
W = ( 833 < width ) ? 833 : width,
adminbar_height = 0;
//...
上記のコードは、ハードコード化された高さ/幅の値を使用してtb_position
関数を再定義することになります。ボディクラスを持つ特定のページを対象としたカスタムスタイルルールもあります。
#File: wp-admin/css/common.css
body.about-php #TB_window.thickbox-loading:before,
body.plugin-install-php #TB_window.thickbox-loading:before,
body.import-php #TB_window.thickbox-loading:before,
body.plugins-php #TB_window.thickbox-loading:before,
body.update-core-php #TB_window.thickbox-loading:before,
body.index-php #TB_window.thickbox-loading:before {
content: "";
display: block;
width: 20px;
この辺には素晴らしい仕事もエレガントな仕事もありません。私自身の目的のために、私は自分のthickboxを表示する前に次の(カスタムで書かれた)javascript関数を呼んでいます(これはまた私自身が_tb_show
の呼び出しでthickboxを開くことを引き継ぐことを要求します)
var resetWordpressHacks = function(){
//remove these styles from body if they exist
var classes = ['about-php','plugin-install-php','import-php',
'plugins-php','update-core-php','index-php'];
var removed = [];
$.each(classes, function(k,v){
if(!$('body').hasClass(v)) { return; }
removed.Push(v);
$('body').removeClass(v);
});
var tb_position_original = window.tb_position;
//some wordpress pages redefine this function which breaks
//the thickbox, so we need to reset it here.
window.tb_position = function() {
var isIE6 = typeof document.body.style.maxHeight === "undefined";
jQuery("#TB_window").css({marginLeft: '-' + parseInt((TB_WIDTH / 2),10) + 'px', width: TB_WIDTH + 'px'});
if ( ! isIE6 ) { // take away IE6
jQuery("#TB_window").css({marginTop: '-' + parseInt((TB_HEIGHT / 2),10) + 'px'});
}
}
var tb_remove_original = window.tb_remove;
window.tb_remove = function()
{
$.each(removed, function(k,v){
$('body').addClass(v);
window.tb_position = tb_position_original;
});
tb_remove_original();
}
}
この機能は
Thickboxの閉じるボタンの表示を変更するカスタムスタイルルールでボディクラスを削除する(残念ながらハードコード化されたリスト)
tb_position
関数を標準のthickboxバージョンに再定義します(やはり、thickboxライブラリからコピー/貼り付けしたハードコードされた関数を使用)。
モンキーパッチ元のtb_remove
関数を呼び出す前に、上からボディクラスとカスタムtb_position
関数をrestore復元するようにtb_remove
関数を再定義します。
この結果、Wordpressのサイズとスタイルのカスタマイズは行われませんが、thickboxが閉じると元に戻ります。これがどれほど安定しているかは言えませんが、現時点ではうまくいっているようです。また、この関数はすべての変更を元に戻すわけではありません(一部のスコープはアクセスできない場合があります)ので、このソリューションを使用するときは、この点に留意してください。