Posts Tagged ‘WordPress’

このページの目次

wp_get_attachment_image_srcの挙動

火曜日, 8月 28th, 2012

こんにちは、なかわけです。
今日はWordpressのwp_get_attachement_image_srcの話。
マニュアルでは第1引数に画像ID(attachment ID)を与えると画像のhtmlソースが取得できると書いてあります。
残念、マニュアルが英語しかない。がんばって読んでちょ)
しかし、マルチサイトの場合現在のサイトと画像が一致していないと取得できません。
たとえばAサイトにa画像があって、Bサイトにb画像がある場合、Aサイトでwp_get_attachement_image_src(b画像の画像ID);とやっても表示されません。この場合以下のような処理が必要です。

switch_to_blog(BサイトのサイトID);
wp_get_attachement_image_src(b画像の画像ID);
//画像を表示する処理など
restore_current_blog();

どこにも書いてないからハマるよね(´・ω・`)・・・

Lightbox2 の画像サイズの制限をしてみた

金曜日, 6月 29th, 2012

こんにちは。なかわけです。

みんな大好きLightboxの画像の大きさを制限するカスタマイズをしてみました。標準ではないんですね、この機能。
jsとちょこっとcssを変更します。縮小画像を生成する方法ではなく、width, height を指定して表示上縮小する方法です。
今回仕様したバージョンはLightbox v2.51です。元々のコードはこんな感じでした。

    Lightbox.prototype.changeImage = function(imageNumber) {
      var $image, $lightbox, preloader,
        _this = this;
      this.disableKeyboardNav();
      $lightbox = $('#lightbox');
      $image = $lightbox.find('.lb-image');
      this.sizeOverlay();
      $('#lightboxOverlay').fadeIn(this.options.fadeDuration);
      $('.loader').fadeIn('slow');
      $lightbox.find('.lb-image, .lb-nav, .lb-prev, .lb-next, .lb-dataContainer, .lb-numbers, .lb-caption').hide();
      $lightbox.find('.lb-outerContainer').addClass('animating');
      preloader = new Image;
      preloader.onload = function() {
        $image.attr('src', _this.album[imageNumber].link);
        $image.width = preloader.width;
        $image.height = preloader.height;
        return _this.sizeContainer(preloader.width, preloader.height);
      };
      preloader.src = this.album[imageNumber].link;
      this.currentImageIndex = imageNumber;
    };

これを以下のように変更しました。


Lightbox.prototype.changeImage = function(imageNumber) {
var $image, $lightbox, preloader,
_this = this;
var widthRetio, heightRetio, retio;
var maxWidth = 800, maxHeight = 800;
this.disableKeyboardNav();
$lightbox = $(‘#lightbox’);
$image = $lightbox.find(‘.lb-image’);
this.sizeOverlay();
$(‘#lightboxOverlay’).fadeIn(this.options.fadeDuration);
$(‘.loader’).fadeIn(‘slow’);
$lightbox.find(‘.lb-image, .lb-nav, .lb-prev, .lb-next, .lb-dataContainer, .lb-numbers, .lb-caption’).hide();
$lightbox.find(‘.lb-outerContainer’).addClass(‘animating’);
preloader = new Image;
preloader.onload = function() {
$image.attr(‘src’, _this.album[imageNumber].link);
if(preloader.width > maxWidth){
widthRetio = maxWidth / preloader.width;
}else {
widthRetio = 1;
}
if(preloader.height > maxHeight){
heightRetio = maxHeight / preloader.height;
}else {
heightRetio = 1;
}
if(widthRetio > heightRetio){
retio = heightRetio;
}else{
retio = widthRetio;
}
$image.width = Math.round(preloader.width * retio);
$image.height = Math.round(preloader.height * retio);
if(retio < 1){ $(‘.lb-image’).attr(‘width’, $image.width); $(‘.lb-image’).attr(‘height’, $image.height); }else{ $(‘.lb-image’).removeAttr(‘width’); $(‘.lb-image’).removeAttr(‘height’); } return _this.sizeContainer($image.width, $image.height); }; preloader.src = this.album[imageNumber].link; this.currentImageIndex = imageNumber; };[/javascript] ざっくり説明すると、194行目で制限する大きさを設定しています。幅800px, 高さ800pxに。ここの数字を変えれば好きな大きさに変更できます。 206から220行目までで縮小する比率を求める処理をしています。 221,222行目で画像を縮小しています。 223から229行目では縮小する場合はwidth, height属性を追加して、縮小しない場合はwidth, height属性を削除する処理をしています。 あと、cssも少し変更しました。 [css num=24 highlight_lines="26,27"] /* line 24, ../sass/lightbox.sass */ #lightbox img { /*width: auto;*/ /*height: auto;*/ } [/css] 26,27行目をコメントアウトするだけ。 大抵はこれだけで事足りるんじゃないでしょうか。

WordPressで複数ブログを作るとプラグインがうまく動かない

木曜日, 3月 12th, 2009

こんにちは、なかわけです。

WPで偶然見つけた不具合があったのでメモ程度に書いておきます。

起きた現象はタイトルの通り、WPで複数のブログを作るとプラグインがうまく動かないというものです。

わかっている限りの環境は以下のようでした。

  • WordPress(ヴァージョン2.5とヴァージョン2.7)をふたつインストール
  • ふたつのWordPressはひとつのデータベースで管理
  • 動かなかったプラグインはSyntaxhighlighter系

なぜふたつのWPをインストールしたかというと、旧ヴァージョンと新ヴァージョンでどこが違うか比較がしたかったからです。WP自体の挙動は特に問題なくSyntaxhighlighterのみが動かなかったように思います。

解決方法としては旧バージョンを削除することでした。

いまとなってはあえて不具合にある状態に戻したくはないので、原因を追究はできませんが、もし同じようなことでお悩みの方がいましたらと思い・・・あんまりいないか。