这段代码可以工作,但我集成它的方式破坏了媒体上传程序。我如何才能正确地集成它?

时间:2017-09-25 作者:MarvinLazer

这段代码就在我的函数中。php文件,用于更改media upload按钮中的文本,因为我使用media uploader允许站点用户上传个人名片(如果他们选择的话)。当我意识到我实际上想在WP上传器中隐藏几个页面元素,以及在上传的文件中提取“link URL”字段的内容时,这个函数是JQuery和CSS实际工作的唯一地方。如何以“正确”的方式将此代码集成到站点中?有没有钩子可以用来正确地附加JQuery和CSS的这些行?

add_filter(\'attachment_fields_to_edit\', \'my_action_button\', 20, 2);

function my_action_button($form_fields, $post) {
    $send = "<input type=\'submit\' class=\'button\' name=\'send[$post->ID]\' value=\'" . esc_attr__( \'Use Photo\' ) . "\' />";
    $form_fields[\'buttons\'] = array(\'tr\' => "\\t\\t<tr class=\'submit\'><td></td><td class=\'savesend\'>$send</td></tr>\\n"); ?>
<!-- This breaks the media uploader, but it does what it\'s supposed to do. Probably needs to be on a different page, but I don\'t know where. -->
    <script>
        jQuery(\'.savesend input[type=submit]\').click(function(){  
            var url = jQuery(this).parents(\'.describe\').find(\'.urlfile\').data(\'link-url\');
            var field = jQuery(this).parents(\'.describe\').find(\'.urlfield\');
            field.val(url);
        });
    </script>
    <style>
        #media-head-125, #imgedit-response-125, .savebutton.ml-submit, .image-size, .align, .post_content, .post_excerpt, .image_alt, .post_title.form-required, .media-types.media-types-required-info, .url {
            display: none !important;
        }
    </style>
    <?php return $form_fields;
}

1 个回复
最合适的回答,由SO网友:CodeMascot 整理而成

首先,不要在过滤器挂钩上使用jQuery、JavaScript或CSS代码。原因过滤器挂钩不是这样设计的。它的设计目的是获取输入修改或操纵输入,并将其返回到输入的位置。所以它没有功能echo 任何东西而且没有echo 表示没有为HTML放置脚本。

其次,您可以将代码分成两部分,并将jQuery和CSS代码放入一个单独的文件中,然后将该脚本文件与admin_enqueue_scriptswp_enqueue_scripts. 这将是一个很长的例子,所以我在这里不提它。请进行一些搜索。我相信你会找到一个例子。

第三,通过将脚本直接挂接到admin_headadmin_footer (对于前端wp_headwp_footer ). 现在对于您的情况,我假设您需要将其挂接到您的管理后端。所以代码如下-

add_filter(\'attachment_fields_to_edit\', \'the_dramatist_action_button\', 20, 2);
function the_dramatist_action_button( $form_fields, $post ) {
    $send = "<input type=\'submit\' class=\'button\' name=\'send[$post->ID]\' value=\'" . esc_attr__( \'Use Photo\' ) . "\' />";
    $form_fields[\'buttons\'] = array(\'tr\' => "\\t\\t<tr class=\'submit\'><td></td><td class=\'savesend\'>$send</td></tr>\\n");
    return $form_fields;
}

add_action( \'admin_footer\', \'the_dramatist_footer_scripts\' );
function the_dramatist_footer_scripts() {
    ?>
    <script>
        //jQuery(\'.savesend input[type=submit]\').click(function(){
        //  var url = jQuery(this).parents(\'.describe\').find(\'.urlfile\').data(\'link-url\');
        //  var field = jQuery(this).parents(\'.describe\').find(\'.urlfield\');
        //  field.val(url);
        //});

        // I prefer writing your jQuery code like below.
        (function($){
            \'use strict\';
            $(funtion(){
                $(\'.savesend\').on( \'click\', \'input[type=submit]\', function() {
                    var url = $(this).parents(\'.describe\').find(\'.urlfile\').data(\'link-url\');
                    var field = $(this).parents(\'.describe\').find(\'.urlfield\');
                    field.val(url);
                });
            });
        })(jQuery)

    </script>
    <style>
        #media-head-125, #imgedit-response-125, .savebutton.ml-submit, .image-size, .align, .post_content, .post_excerpt, .image_alt, .post_title.form-required, .media-types.media-types-required-info, .url {
            display: none !important;
        }
    </style>
    <?php
}
还要注意,我试图用更好的方法重写jQuery代码。以这种方式编写jQuery代码更好。

注意:我尚未测试此代码。请在上线前进行测试。

结束