web-dev-qa-db-ja.com

メタボタス上のカスタムボタンを持つTinyMCE

最初に私に謝罪をさせてください - 私がここにいたことが今週の私の4番目の質問です!あなたは皆とても役に立ちました、だからこそ私は戻ってきます..

私は 'エディタ'を利用しないカスタム投稿タイプをまとめようとしています。ページにはたくさんの入力フィールドがあり、それらのほとんどはカスタムTinyMCEエディタを必要とします。

私はテキストエリアを持つメタボックスを持っています。私は次のコードを試してみました:

<script type="text/javascript">
    jQuery(document).ready(function() {
        jQuery("#etymology").addClass("mceEditor");
        if ( typeof( tinyMCE ) == "object" &&
        typeof( tinyMCE.execCommand ) == "function" ) {
            tinyMCE.execCommand("mceAddControl", false, "etymology");
        }
    });
</script>

と...

    if (function_exists('wp_tiny_mce')) {

        add_filter('teeny_mce_before_init', create_function('$a', '
            $a["theme"] = "advanced";
            $a["skin"] = "wp_theme";
            $a["height"] = "75";
            $a["theme_advanced_buttons1"] = "bold, italic, pastetext, pasteword,
                bullist, numlist, link, unlink, outdent, indent, charmap, removeformat, spellchecker, fullscreen";

            return $a;'));

        wp_tiny_mce(true);
    }

彼らは一緒に働いているようには見えません。 TinyMCEエディタは右側の要素に表示されますが、これは単にデフォルトのWPエディタであり、実装しようとした設定ではありません。

だから、私の3つの質問は...

質問1カスタム投稿タイプにメタボックスを使用する場合、どのような方法が最も適していますか(最高で柔軟性があり、統合されていて最小の "ハッキー")。カスタムTinyMCEエディタを複数の要素に追加しますか?

質問2質問1の続き...このような設定にカスタムボタンを追加する方法を教えてください。

質問3TinyMCEエディタの最小の高さを変更することは可能ですか? 100pxに強制キャップされているようです。

この作品を作ろうとした私の研究と試みは、TinyMCE機能を組み込んだWordPressがその仕事をしないことを示しているように見えます。これを完全にオーダーメイドにすること、すなわち既存のtinyMCEスクリプトを登録解除して私自身の登録をすることが私には最善かもしれません。もしそうなら、それは私のカスタム投稿タイプのページでのみこれを行うことが可能ですか?

エッセイをお詫び申し上げます。


メジャーエディット - 質問1と2解決済みさて、Martinの投稿(そしてMikeのコードのおかげで)カスタムボタンで複数のテキストエリアを設定することができました:

function meta_genus_species() {
    global $post;

    $genus = get_post_custom_values( 'genus', $post->ID );
    $species = get_post_custom_values( 'species', $post->ID );
    $etymology = get_post_custom_values( 'etymology', $post->ID );
    $family = get_post_custom_values( 'family', $post->ID );
    $common_names = get_post_custom_values( 'common_names', $post->ID );

    if (!isset($id)) { $id = "etymology"; }
    if (!isset($temp_min)) { $temp_min = plugins_url('images/temp_max.png' , __FILE__); }
    if (!isset($temp_max)) { $temp_max = plugins_url('images/temp_min.png' , __FILE__); }
    if (!isset($pH_min)) { $pH_min = plugins_url('images/pH_max.png' , __FILE__); }
    if (!isset($pH_max)) { $pH_max = plugins_url('images/pH_max.png' , __FILE__); }

$tinyMCE = <<<EOT
    <script type="text/javascript">
        jQuery(document).ready(function($) {
            $("#{$id}").addClass("mceEditor");
            if ( typeof( tinyMCE ) == "object" &&
                 typeof( tinyMCE.execCommand ) == "function" ) {
              tinyMCE.settings = {
                theme : "advanced",
                mode : "none",
                language : "en",
                height:"75",
                width:"100%",
                theme_advanced_layout_manager : "SimpleLayout",
                theme_advanced_toolbar_location : "top",
                theme_advanced_toolbar_align : "left",
                theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,temp_min,temp_max,pH_min,pH_max",
                theme_advanced_buttons2 : "",
                theme_advanced_buttons3 : "",
                setup : function(ed) {
                    ed.addButton('temp_min', {
                        title : 'Temperature: Minimum',
                        image : '{$temp_min}',
                        onclick : function() {
                            ed.focus();
                            ed.selection.setContent('[temp_min]');
                        }
                    }),
                    ed.addShortcut("ctrl+1", "temp_min", "temp_min"),
                    ed.addButton('temp_max', {
                        title : 'Temperature: Maximum',
                        image : '{$temp_max}',
                        onclick : function() {
                            ed.focus();
                            ed.selection.setContent('[temp_max]');
                        }
                    }),
                    ed.addButton('pH_min', {
                        title : 'pH: Minimum',
                        image : '{$pH_min}',
                        onclick : function() {
                            ed.focus();
                            ed.selection.setContent('[pH_min]');
                        }
                    }),
                    ed.addButton('pH_max', {
                        title : 'pH: Maximum',
                        image : '{$pH_max}',
                        onclick : function() {
                            ed.focus();
                            ed.selection.setContent('[pH_max]');
                        }
                    });
                }
              };
              tinyMCE.execCommand("mceAddControl", true, "{$id}");
            }
        });
    </script>
EOT;
    echo $tinyMCE;

    ?>
<div class="meta_control normal">
    <p>Description of taxonomy.</p>
    <div class="box">
        <label>Genus</label>
        <p>
            <input name="genus" class="text" value="<?php if(isset($genus[0])) { echo esc_attr( $genus[0] ); } ?>" />
            <span>Testing...</span>
        </p>
    </div>
    <div class="box">
        <label>Species</label>
        <p>
            <input name="species" class="text"  value="<?php if(isset($species[0])) { echo esc_attr( $species[0] ); } ?>" />
            <span>Testing...</span>
        </p>
    </div>
    <p>
        <label>Etymology</label>
        <textarea cols="50" rows="5" name="etymology" id="etymology"><?php if(isset($etymology[0])) { echo esc_attr( $etymology[0] ); } ?></textarea>
        <span>Description</span>
    </p>
    <p>
        <label>Family</label>
        <input name="family" class="text"  value="<?php if(isset($family[0])) { echo esc_attr( $family[0] ); } ?>" />
        <span>Description</span>
    </p>
    <p>
        <label>Common Names</label>
        <input name="common_names" class="text"  value="<?php if(isset($common_names[0])) { echo esc_attr( $common_names[0] ); } ?>" />
        <span>Description</span>
    </p>
</div>
    <?php

}

function meta_authored() {
    global $post;

    $species_author = get_post_custom_values( 'species_author', $post->ID );
    $year_described = get_post_custom_values( 'year_described', $post->ID );

    ?>
<div class="meta_control side">
    <label>Species Author</label>
    <p>
        <input name="species_author" class="text" value="<?php if(isset($species_author[0])) { echo esc_attr( $species_author[0] ); } ?>" />
    </p>
    <label>Year Described</label>
    <p>
        <input name="year_described" class="text" value="<?php if(isset($year_described[0])) { echo esc_attr( $year_described[0] ); } ?>" />
    </p>
</div>
    <?php
}

私は絶対に月を超えています!私はその情報を見つけるためにSOを懸命に取り組んできました。マーティンありがとうございます。

ただ今答えるために質問3!

2
dunc

これは正しい方向に向かっているのでしょうか。. Mikes Code を参照してください。

1
MartinJJ