10日程前から当ブログで利用させてもらっているwordpressテーマのSimplicityの既知の不具合と対応策まとめがテーマ作成者さんのサイトで公開されています。
こんな不具合があるから注意しましょうって話ではありません。
広告
調べてみる。
WORDPRESSの内部はよくわかっていないが、無料で素晴らしい物を提供して頂いているのでバグ探しくらい手伝えたら手伝いたい。
ということで既に解決済みかもしれないが調べてみる。
後で続き書きます。
wp-include/template.phpのget_page_templateをみた感じだと、テンプレートファイル内にあるpage-link.phpのファイル名が原因ですね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
function get_page_template() { $id = get_queried_object_id(); $template = get_page_template_slug(); $pagename = get_query_var('pagename'); if ( ! $pagename && $id ) { // If a static page is set as the front page, $pagename will not be set. Retrieve it from the queried object $post = get_queried_object(); if ( $post ) $pagename = $post->post_name; } $templates = array(); if ( $template && 0 === validate_file( $template ) ) $templates[] = $template; if ( $pagename ) $templates[] = "page-$pagename.php"; if ( $id ) $templates[] = "page-$id.php"; $templates[] = 'page.php'; return get_query_template( 'page', $templates ); } |
テンプレートファイル内にpage-xxx.phpのようにpage-から始まるファイルがあって、xxxと同じパーマリンクが設定されるとそのpage-xxx.phpがテーマファイルになってしまうようです。
ということで対策としてはpage-link.phpのファイル名をかえるといいのかな。
ざっと見た感じ以下のファイル名もやめたほうが良さそう
- taxonomy-
- tag-
- category-
- author-
- archive-
もうひとつのバグは去年からわかってるみたいですが、結構な難題なのかな。
作者さんがお手上げだと言ってるのにコメント1つついてないのはちょっとひどいと思う。
javascriptあんまわかりませんが、明日以降もう1つのバグも見てみよ。
追記 見てみた。
1泊2日のつもりで出かけたら2泊3日になってしまって、続き見るのが遅くなりました。
javascriptの不具合のほうも見てみます。
私はtwitterをやっていないので、テンプレート作者わいひらさんの寝ログよりTwitterのウィジェット部分のタグをお借りして試してみた。
テストしたブログの追従エリアにはtwitterのウィジェットとAmazonのバナーが入っています。
追従の開始場所が↑このようにズレます。
不具合とはこのことだろうか?
だとしたら非同期である以上、常に正しい位置からの開始は無理だと思います。
ただ、一定時間ごとに基準となる値を取得し続ければ、ページロード後に基準となる値が変わったとしても僅かな時間差で正しい位置に修正ができますね。
問題のjavascript.jsを見たところ、基準となる値(変数)は91行目のwrapperHeightです。
81 82 83 84 85 86 87 88 89 90 91 |
var wrapper = jQuery('#sidebar-scroll'); // スクロール追従要素のID var side_top_margin = 40; if (!wrapper.size()) {return;}//スクロール追従エリアにウイジェットが入っていないときはスルー if (side.css('clear') == 'both') {return;}//レスポンシブでサイドバーをページ下に表示しているときはスルー if (main.length === 0 || side.length === 0 || wrapper.length === 0) { return; } var w = jquery(window); var wrapperHeight = wrapper.outerHeight(); |
このwrapperHeightが動的に変われば解決かと思います。
ということで私ならwrapperHeightをグローバル変数にしてsetIntervalを使って定期的に値を更新します。
具体的にはまず91行目を
90 91 |
var w = jquery(window); var wrapperHeight = wrapper.outerHeight(); |
から
90 91 |
var w = jquery(window); wrapperHeight = wrapper.outerHeight(); |
このようにvar外します。
続いて30行目より上にグローバル変数の宣言と、定期的に値を更新する処理を加えます。
27 28 29 30 |
///////////////////////////////// //スクロール追従 ///////////////////////////////// (function(jquery) { |
これを
26 27 28 29 30 31 32 33 34 35 |
///////////////////////////////// //スクロール追従 ///////////////////////////////// var wrapperHeight; function test1(){ wrapperHeight=jQuery('#sidebar-scroll').outerHeight(); } setInterval('test1()',1000); (function(jquery) { |
setIntervalで1秒ごとに値を更新します。
これで高さが変わっても1秒以内に正しい開始位置になるかと思います。
さらに時間差を短くしたければ1000(1秒)を100(0.1秒)とかにすれば良いですが、そこまでは必要無い気がします。
と偉そうに書きましたが、不具合の内容が私の認識で合っているのか自信が無い。
サイドバーがビヨーンというようには見えなかったので、違う現象だろうか?
これからテンプレート作者のわいひらさんにこの記事を知らせますが、もし不具合が別の物だったり、解決できてなかったら恥ずかしいから追記部分は速攻消そう。
あっていたようです。
無料テンプレートを使ってる方々は、無料で提供する為に苦労されてる人がいることを忘れないように。
あと、特にsimplicityを使ってる方は作者さんのプロフィールに目を通してください。
バグ一つの修正でも結構な負担だということがよくわかります。
[…] [修正b]既知の不具合の「link」パーマリンクが作成できない不具合修正(原因と解決方法) […]