ヘッダーコンテンツの記載について

  • このトピックには8件の返信、3人の参加者があり、最後にM Tにより3ヶ月、 3週前に更新されました。
9件の投稿を表示中 - 1 - 9件目 (全9件中)
  • 投稿者
    投稿
  • #30591
    M T
    参加者

    【お使いの 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
    #30595
    KUMAI KAZUYUKI
    参加者

    ヘッダーコンテンツは出力時に wp_kses_post() を通ってサニタイズされているので、<select><option> は削除されます。

    0
    #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
    #30615
    M T
    参加者

    @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
    #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
    #30619
    M T
    参加者

    なんどもすみません。

    修正コードでやってみると、ヘッダーコンテンツに Lang/言語 日本語 English とテキストだけ表示されるのですが、プルダウンになりません。
    先ほど、エラーが表示された際には、プルダウンで表示されていたのですが。

    0
    #30620
    キタジマ タカシ
    キーマスター

    あれ…ショートコードでもサニタイズされちゃいますかね…。こちらこそ何度もすみません。ちょっといま僕の開発環境がアップデート作業中につきこわれてしまっているので、後ほど確認します。

    0
    #30621
    キタジマ タカシ
    キーマスター

    多分この方法でヘッダーコンテンツでショートコードを使えるようにされていると思うのですが、この方法だとショートコードでも HTML が制限されてしまうようです。

    なので、次の Snow Monkey のアップデートで、↑のコードを使わなくてもオフィシャルにヘッダーコンテンツのショートコード利用をサポートするようにしようと思います。次のアップデートがきたら、上記ページに記載のコードは消して、試してみてください。アップデートまでしばしお待ちください。

    0
    #32952
    M T
    参加者

    ありがとうございます。
    V8で、ショートコードが使えるようになりました!

    0
9件の投稿を表示中 - 1 - 9件目 (全9件中)
  • トピック「ヘッダーコンテンツの記載について」には新しい返信をつけることはできません。