1

WordPress アップロードの厚いボックスで必要な Alt Text フィールドを作成するために、いくつかの jQuery を挿入しています。

[投稿に挿入] ボタンのクリックをインターセプトし、フィールドが入力されているかどうかを確認します。

[ギャラリー] タブと[メディア ライブラリ]タブでは問題なく動作しますが、[コンピューターから] タブには、アップロードが終了したときに [投稿に挿入] ボタンの動作を変更するために「リスナー」が必要です。

ここに画像の説明を入力



を試していましたが、それを強制終了または再作成setIntervalする方法がわかりませんが、おそらく誰かがリスナーが存在するかどうか、またはここでの私のロジックが曖昧であると思われるため、このコードを機能させる方法を知っている可能性があります...

これがコードで、コメントされています。

add_action('admin_head-media-upload-popup','so_11149675_required_alt_text');

function so_11149675_required_alt_text()
{
    // Detect current tab ("From Computer" == "type")
    $tab = isset($_GET['tab']) ? $_GET['tab'] : "type";

    // ( 'From Computer' or ( 'Gallery' and 'Library' ) )
    $jquery = ('type' == $tab) ? 'var refreshUpload = setInterval(function(){$(".savesend input").each(checkAltTextPermanent);},500);' : '$(".savesend input").each(checkAltTextOnce);';

    echo <<<HTML
    <script language="javascript" type="text/javascript">
        // var refreshUpload; /* testing */

        // Function called by From Computer tab
        // should run only once -> when the upload table and fields are created
        function checkAltTextPermanent() {
            // Create the required asterisk symbol
            // setInterval creates a loop here
            jQuery('.image_alt th label').each(function(i,e) {
                jQuery('<span class="alignright"><abbr title="required" class="required">*</abbr></span>').prependTo(this);
            }); 

            // Alter button behavior
            // Another loop in the alert box
            jQuery(this).click(function(e) {
                // clearInterval(refreshUpload);
                var value = jQuery(this).parent().parent().parent().find('.image_alt input').val();

                if('' != value) 
                    return true;

                alert ('Please fill the Alt text');
                return false;
            });
        }

        // Function called by Gallery and Library tabs
        function checkAltTextOnce() {
            jQuery(this).click(function(e) {
                var value = jQuery(this).parent().parent().parent().find('.image_alt input').val();

                if('' != value) 
                    return true;

                alert ('Please fill the Alt text');
                return false;
            });
        }

        jQuery(document).ready(function($) {
            // Defined in PHP, calls checkAltTextOnce or checkAltTextPermanent
            {$jquery}

            // Used in Gallery and Libray tabs
            $('.image_alt th label').each(function(i,e) {
                $('<span class="alignright"><abbr title="required" class="required">*</abbr></span>').prependTo(this);
            });
        });
    </script>
HTML;
}
4

1 に答える 1

1

これを試して:

jQuery(".savesend input").live("click", validateAltText);

function validateAltText() {
    var value = $(".image_alt input").val();

    if (value) 
        return true;

    alert('Please fill the Alt text');
    return false;
}
于 2012-06-22T03:21:47.697 に答える