web-dev-qa-db-ja.com

カテゴリメタボックスでトップレベルのアイテムをラジオボタンに変更する

私はWordPressのカテゴリリストを管理者用パネルのラジオボタンに変更することが可能であることを知っています、しかし私はちょうど親ラジオボタンとサブカテゴリまたは子供のチェックボックスを作りたいです。

<ul>
    <li><input type="radio"> Category 1
        <ul class="children">
        <li><input type="checkbox">Category 1 - Sub Cat 1</label></li>
        <li><input type="checkbox">Category 1 - Sub Cat 2</label></li>
        </ul>
    </li>
    <li><input type="radio"> Category 2</li>
    <li><input type="radio"> Category 3</li>
    <li><input type="radio"> Category 4
        <ul class="children">
        <li><input type="checkbox">Category 4 - Sub Cat 1</label></li>
        <li><input type="checkbox">Category 4 - Sub Cat 2</label></li>
        </ul>
    </li>
    <li><input type="radio"> Category 5</li>
</ul>

私はコアファイルをめちゃくちゃにしたくありませんし、誰かがテーマ関数や他の方法で出力を上書きする方法を知っているかどうか疑問に思いました。

4
George

JavaScriptを使ってこれを簡単に実現できると確信しています。私はこれを試してみたい:

function convert_root_cats_to_radio()
{
    global $post_type;

    if ( 'post' != $post_type )
        return;
    ?>
    <script type="text/javascript">
    jQuery("#categorychecklist>li>label input").each(function(){
        this.type = 'radio';
    });
    </script>
    <?php
}
add_action( 'admin_footer-post.php', 'convert_root_cats_to_radio' );
add_action( 'admin_footer-post-new.php', 'convert_root_cats_to_radio' );

これが行うことは、階層をループして最上位項目をラジオボタンに変換することです。あなたが厳密にこれを強制する必要があるならば、javascriptはそれでも人気のあるタブの下で選択されることができるので、良い解決策にはなりません。

保存後も階層を維持するには、このプラグインもチェックしてください。 http://wordpress.org/extend/plugins/category-checklist-tree/

もう少し強制力のあるものが必要な場合は、それに対するカスタムプラグインが必要です。上記のプラグインは、その努力を始めるのに最適な場所です。

乾杯〜

1
Matthew Boynes

関数がwalker型を使用している場合は、walkerの拡張された子クラスでオーバーライドします。

これを行うと、子クラスがHTMLをエコーする方法を制御できます。あなたはそれをあなたが望むようにスタイルすることができます。

0
uwiuw