-
投稿者投稿
-
2019年10月14日 10:25 PM #30591
【お使いの Snow Monkey のバージョン】v7.13.2
お世話になっております。
ヘッダーコンテンツの記載についてです。
HTMLは使用できるので、以下のコードで、言語切り替えのドロップダウンリストを作りたいのですが、ドロップダウンにならず、うまく表示できません。<div class="langbutton"><select name="select" onchange="location.href=value;"> <option>Lang/言語</option> <option value="https://xxxxx.me/">日本語</option> <option value="https://xxxxx.me/en/">English</option> </select></div>
ヘッダーコンテンツ以外では、ドロップダウンリストが表示されますが、何が問題なのでしょうか。
どうぞよろしくお願いいたします。
♥ 0いいねをした人: 居ません2019年10月14日 11:21 PM #30595ヘッダーコンテンツは出力時に
wp_kses_post()
を通ってサニタイズされているので、<select>
や<option>
は削除されます。♥ 0いいねをした人: 居ません2019年10月15日 8:34 AM #30609@KUMAI さんありがとうございます!
@M T さん、@KUMAI さんが書かれているとおりになります。ヘッダーコンテンツは HTML が使用可能ですが、セキュリティを確保するため、エディター上でも利用可能な HTML しか許可されないようになっています。
ショートコードをつくり、それをヘッダーコンテンツに入れるのが良いと思います。
add_shortcode( 'my-dropdown', function() { ob_start(); ?> <div class="langbutton"><select name="select" onchange="location.href=value;"> <option>Lang/言語</option> <option value="https://xxxxx.me/">日本語</option> <option value="https://xxxxx.me/en/">English</option> </select></div> <?php return get_ob_clean(); } );
これを My Snow Monkey もしくは子テーマの
functions.php
にはり、ヘッダーコンテンツに[my-dropdown]
と記述。♥ 0いいねをした人: 居ません2019年10月15日 9:24 AM #30615@KUMAI さん、キタジマさん ありがとうございます。
ご教示いただいたコードと、マニュアルにあったショートコードをヘッダーコンテンツで使うための以下のコードをy Snow Monkey に追加。
それから、ヘッダーコンテンツにショートコードを記載すると、ドロップダウンリストの下に以下のようなエラーがページ全体に出てしまいます。
修正方法などありましたら、教えていただけますでしょうか。●ショートコードをヘッダーコンテンツで使うためのコード
/** * ヘッダーコンテンツでショートコードを使用可能にする * * @param string $mod * @return string */ add_filter( 'theme_mod_header-content', function( $mod ) { if ( is_admin() ) { return $mod; } return do_shortcode( $mod ); } );
●ページ全体に表示されるエラー
Fatal error: Uncaught Error: Call to undefined function get_ob_clean() in /home/volunavi/volunavi.xsrv.jp/public_html/wp-content/plugins/my-snow-monkey/my-snow-monkey.php:625 Stack trace: #0 /home/volunavi/volunavi.xsrv.jp/public_html/wp-includes/shortcodes.php(325): {closure}('', '', 'my-dropdown') #1 [internal function]: do_shortcode_tag(Array) #2 /home/volunavi/volunavi.xsrv.jp/public_html/wp-includes/shortcodes.php(199): preg_replace_callback('/\\[(\\[?)(my\\-dr...', 'do_shortcode_ta...', '[my-dropdown]') #3 /home/volunavi/volunavi.xsrv.jp/public_html/wp-content/plugins/my-snow-monkey/my-snow-monkey.php(610): do_shortcode('[my-dropdown]') #4 /home/volunavi/volunavi.xsrv.jp/public_html/wp-includes/class-wp-hook.php(286): {closure}('[my-dropdown]') #5 /home/volunavi/volunavi.xsrv.jp/public_html/wp-includes/plugin.php(208): WP_Hook->apply_filters('[my-dropdown]', Array) #6 /home/volunavi/volunavi.xsrv.jp/public_html/wp-includes/theme.php(917): apply_filters('theme_mod_heade...', '[my-dropdown]') #7 /home/volunavi/volunav in /home/volunavi/volunavi.xsrv.jp/public_html/wp-content/plugins/my-snow-monkey/my-snow-monkey.php on line 625 サイトに技術的な問題が発生しています。
♥ 0いいねをした人: 居ません2019年10月15日 9:28 AM #30618ぎゃーすみません、関数名が間違っていました。
get_ob_clean()
ではなく、ob_get_clean()
が正解です。add_shortcode( 'my-dropdown', function() { ob_start(); ?> <div class="langbutton"><select name="select" onchange="location.href=value;"> <option>Lang/言語</option> <option value="https://xxxxx.me/">日本語</option> <option value="https://xxxxx.me/en/">English</option> </select></div> <?php return ob_get_clean(); } );
♥ 0いいねをした人: 居ません2019年10月15日 9:38 AM #30619なんどもすみません。
修正コードでやってみると、ヘッダーコンテンツに Lang/言語 日本語 English とテキストだけ表示されるのですが、プルダウンになりません。
先ほど、エラーが表示された際には、プルダウンで表示されていたのですが。♥ 0いいねをした人: 居ません2019年10月15日 9:41 AM #30620あれ…ショートコードでもサニタイズされちゃいますかね…。こちらこそ何度もすみません。ちょっといま僕の開発環境がアップデート作業中につきこわれてしまっているので、後ほど確認します。
♥ 0いいねをした人: 居ません2019年10月15日 9:49 AM #30621多分この方法でヘッダーコンテンツでショートコードを使えるようにされていると思うのですが、この方法だとショートコードでも HTML が制限されてしまうようです。
ヘッダーコンテンツでショートコードを使う方法Snow Monkey v8 以降をお使いの方へSnow Monkey v8 以降の場合はこのカスタマイズは不…snow-monkey.2inc.orgなので、次の Snow Monkey のアップデートで、↑のコードを使わなくてもオフィシャルにヘッダーコンテンツのショートコード利用をサポートするようにしようと思います。次のアップデートがきたら、上記ページに記載のコードは消して、試してみてください。アップデートまでしばしお待ちください。
♥ 0いいねをした人: 居ません2019年11月1日 1:27 PM #32952ありがとうございます。
V8で、ショートコードが使えるようになりました!♥ 0いいねをした人: 居ません -
投稿者投稿
- トピック「ヘッダーコンテンツの記載について」には新しい返信をつけることはできません。