在添加媒体弹出窗口中创建自定义设置

时间:2017-09-15 作者:Robert L

我正在添加媒体弹出屏幕中创建一个复选框,以将HTML添加到$html 插入图像时输出。

这很好用。但是,一旦我添加了选中复选框的图像。如果我再次尝试添加它,并取消选中复选框,它将不会注册或保存更改。

因此,始终输出修改后的图像,而不是在取消选中后恢复为WP默认值。

加上选中并插入页面后的复选标记,我每次选择该图像时都会保持预选状态。

如何使“取消选择”复选框按预期运行?

非常感谢您的帮助。谢谢

        class media_uploader_cb{

    function __construct(){
        // attach our function to the correct hook
        add_filter(\'attachment_fields_to_edit\',  array( $this, \'attachment_fields_to_edit\' ), 10, 2);
        //save attachment field
        add_filter( \'attachment_fields_to_save\', array( $this, \'attachment_fields_to_save\' ), 10, 2);
        //add custom css class
        add_filter( \'media_send_to_editor\',      array( $this, \'media_send_to_editor\' ), 10, 2 );
    }

    /**
     * Adding our custom checkbox field to the $form_fields array
     * 
     * @param array $form_fields
     * @param object $post
     * @return array
     */
    function attachment_fields_to_edit($form_fields, $post) {
        $form_fields[\'add_class\'][\'label\'] = __("Add SEO Data");
        $form_fields[\'add_class\'][\'input\'] = \'html\';
        $form_fields[\'add_class\'][\'html\'] = \'<input type="checkbox" value="1" name="attachments[\'.$post->ID.\'][add_class]" id="attachments[\'.$post->ID.\'][add_class]" \'.checked( 1, get_post_meta($post->ID, \'add_class\', true), false ).\'/>\';
        return $form_fields;
    }


    /**
     * Saving our custom checkbox field
     * @param array $post
     * @param array $attachment
     * @return array
     */
    function attachment_fields_to_save($post, $attachment) {

        if( isset($attachment[\'add_class\']) ){
            update_post_meta($post[\'ID\'], \'add_class\', $attachment[\'add_class\']);
        }
        return $post;
    }

    /**
     * Adding our custom css class based on checkbox field 
     * 
     * @param string  $html
     * @param int $id
     * @return string
     */
    function media_send_to_editor( $html, $id ) {
        //only add class if the checkbox was checked
        if ( 1 == (int)get_post_meta($id, \'add_class\', true) ){
            //change this to whatever you want
            $seo_data_to_add = \'custom="HTML Output Here""\';

            // THIS SHOULD BE THE CHECKBOX
            get_post_meta($id, \'add_class\', true);

            $attachment_title = get_the_title($id);
            $title = \'title="\'.$attachment_title .\' by \'. get_option(\'ews_opt_branding\') .\'"\';
            $html = str_replace(\'<img\', \'<img \'.$title.\' \'.$seo_data_to_add.\'\', $html);
        }
        return $html;
    }


}

new media_uploader_cb();

1 个回复
SO网友:Robert L

从另一个论坛获得了一些帮助。这在办公室引发了一些头脑风暴,我们想出了一个解决方案。不确定这是否是解决问题的最佳方法,但它正在按预期工作。我添加了以下代码:

delete_post_meta($id, \'add_class\', true);

就在以下位置上方:

return $html;

在最后一个函数结束时,一切正常。如果有更好的解决方案,请告诉我。

结束

相关推荐

Images are not shown

我可以在媒体/图书馆中看到我的图片,但不能在帖子中看到。问题似乎是图像的真实url以图像结尾。jpg(如果我转到这个url,我可以看到图像)。但在帖子中,我看到了“断开的图像链接”图标。当我检查图像url时,它以图像sizeXsize结尾。jpg,所以Wordpress出于某种原因添加了sizeXsize(例如1000x1000)。如何解决此问题?编辑1:我刚刚安装了WP。我试过theams 2111和215,同样的问题。我已经安装了很多插件,请看一下。Edit2:我已经停用了所有插件,仍然是同一个问题。