-
投稿者投稿
-
2018年5月3日 9:31 PM #2327
私のプラグインで検証したのですが、多分他にもあてはまると思います。
独自のギャラリーショートコード使いたい時に、コアファイルwp-includes/media.php
の、function gallery_shortcode( $attr ) { }
をコピペして、カスタマイズして使いますが、そのファイルの1660行にある、
$output = apply_filters( 'post_gallery', '', $attr, $instance );
のところでエラーが出ます。
私のプラグイン https://wordpress.org/plugins/simple-masonry-gallery/ で検証しました。Fatal error: Uncaught ArgumentCountError: Too few arguments to function Inc2734\WP_Pure_CSS_Gallery\Pure_CSS_Gallery::_post_gallery(), 2 passed in /home/riverforest/www/wordpress/wp-includes/class-wp-hook.php on line 286 and exactly 3 expected in /home/riverforest/www/wordpress/wp-content/themes/snow-monkey/vendor/inc2734/wp-pure-css-gallery/src/Pure_CSS_Gallery.php:29 Stack trace: #0 /home/riverforest/www/wordpress/wp-includes/class-wp-hook.php(286): Inc2734\WP_Pure_CSS_Gallery\Pure_CSS_Gallery->_post_gallery('', Array) #1 /home/riverforest/www/wordpress/wp-includes/plugin.php(203): WP_Hook->apply_filters('', Array) #2 /home/riverforest/www/wordpress/wp-content/plugins/simple-masonry-gallery/lib/SimpleMasonry.php(156): apply_filters('post_gallery', '', Array) #3 /home/riverforest/www/wordpress/wp-includes/shortcodes.php(319): SimpleMasonry->simplemasonry_gallery_shortcode(Array, '', 'gallery') #4 [internal function]: do_shortcode_tag(Array) #5 /home/riverforest/www/wordpress/wp-includes/shortcodes.php(197): preg_replace_ in /home/riverforest/www/wordpress/wp-content/themes/snow-monkey/vendor/inc2734/wp-pure-css-gallery/src/Pure_CSS_Gallery.php on line 29
他のテーマ “Storfront”,”Twenty Seventeen” では、エラーは出ません。
そこで、そことその後ろの3行$output = apply_filters( 'post_gallery', '', $attr ); if ( $output != '' ) return $output;
を削除したら、エラーは出ずに動いたのですが、今度は、上記のプラグインと連携する私のプラグインが https://wordpress.org/plugins/boxers-and-swipers/ 動かなくなりました。
このプラグインはadd_filter( 'post_gallery'
で、ギャラリーを呼び出しています。
他のテーマ “Storfront”,”Twenty Seventeen” も、3行を削除したら https://wordpress.org/plugins/boxers-and-swipers/ が動かなくなりました。以上、報告まで。
♥ 0いいねをした人: 居ません2018年5月4日 10:26 AM #2332コアの
post_gallery
フックは引数を3つとります。Snow Monkey もギャラリーを独自実装しているのですが、
post_gallery
が引数を3つとる前提でコードを組んでいます。/simple-masonry-gallery/lib/SimpleMasonry.php
内では、apply_filters( 'post_gallery', ... )
が定義されていますが、これは引数を2つしかとらないようで、そのため Snow Monkey が3つめを使おうとするときに Fatal Error となってしまうようです。/simple-masonry-gallery/lib/SimpleMasonry.php
のほうもコアと同じく引数を3つとっていただくようにすれば解決するかなと思うのですがどうでしょうか?Snow Monkey 側も、プラグインで post_gallery にフックしてるものがあるときはそちらを優先して独自ギャラリーは使用しない、とかはしたほうが良いかもですね〜。
♥ 0いいねをした人: 居ません2018年5月4日 5:45 PM #2345おっしゃる通りでした。エラーは出なくなりました。
私のコードが古かったようです。
1652行に、* @since 4.2.0 The$instance
parameter was added.とありました。
それ以前のコードを使用していました。他にも変更されている所がありました。コアの写しを使用している場合は、アップデートのためにみてやらないとまずいですね。
以外とメジャーなカスタマイズなので、私の様に、そのパラメーターの追加を知らずに使用しているプラグインが多数あるような気がします。エラーは出なくなりましたが、SnowMonkey では上手く動作しないようです。
子テーマを作り、子テーマのfunctions.php に以下を追加しましたが、上手くいきませんでした。
remove_filter( 'post_gallery', 'Inc2734\WP_Pure_CSS_Gallery\_post_gallery', 999 );
♥ 0いいねをした人: 居ません2018年5月5日 9:55 AM #2347snow-monkey/vendor/inc2734/wp-pure-css-gallery/src/Pure_CSS_Gallery
の、
13行目add_filter( 'post_gallery', array( $this, '_post_gallery' ), 10, 3 );
を、
コメントアウトする事で対処しました。
‘functions.php’で、remove_filterで除去できるか、他の方法での対策をしていただけるとありがたいです。
♥ 0いいねをした人: 居ません2018年5月6日 8:45 AM #2349remove_filter
、クラスや無名関数を使っていると外すの難しいですよね。。
Snow Monkey のギャラリー機能は、下記のファイルを、子テーマで空ファイルで上書きすることで無効化できます。has_filter
という関数でpost_gallery
が Snow Monkey よりも前に使われているか確かめられそうなので、できそうなら Snow Monkey より前に使われている場合は Snow Monkey のギャラリー機能は有効化しない、というような仕組みにする方向で試してみます!♥ 0いいねをした人: 居ません -
投稿者投稿
- トピック「独自ギャラリーショートコードによる不具合」には新しい返信をつけることはできません。