web-dev-qa-db-ja.com

ウィジェットの削除を防ぐ

私はたくさんのウィジェットを使ってサイトを構築しています。彼らは非常にカスタマイズされています。

サイトが稼働しているときには、いくつかの管理者/編集者がこれらのウィジェットを編集する必要があります。

今のところ、私はウィジェット(とその設定)がマウスを1回動かすだけで完全に消去できることを怖がっています(サイドバーからドロップします)。

コンテンツを編集する機能を維持しながらウィジェットの削除を防ぐ方法はありますか?

さらに、Administrationのウィジェット管理ページでは、「ウィジェットの追加」モジュールには余りにも多くのスペースがあり、「アクティブ化されたウィジェット」モジュールには十分ではありません。これは、サイトを構築するときに役立ちますが、サイトが完成したときには役に立ちません。これらのモジュールのサイズを変更する方法はありますか?

どうもありがとう

5
kursus

私が考えることができる解決策はサイドバーで使用されているウィジェットをドラッグする(そして削除する)場所が単にないところにパネルAvailable and Inactive Widgetsを削除することです。

ギャップを埋めるために何か他のものを注入することができます。

この例では、1人のユーザーだけがウィジェットを追加/削除できます。

function wpse_53398_script_printer(){
    // used to display the front end site
    $site = get_site_url();

    // here you can filter who can add/delete widgets
    global $current_user;  
    if ( 'kursus' == $current_user->data->user_login ) 
    {
            echo <<<HTML
            <!-- CSS to hide the widgets descriptions = real estate gains -->
            <style type="text/css">#widget-list .widget-description {display:none;}</style>
            <script type="text/javascript">
            jQuery(document).ready( function($) {
                // swaps the placement of the panels Available Widgets and Incactive Widgets
                $('#available-widgets').appendTo('#widgets-left');
            });     
            </script>
HTML;
    }
    else
    {
            echo <<<HTML
            <!-- CSS to prevent the div from briefly appearing before the jQuery can act -->
            <style type="text/css">#widgets-left {display:none;}</style>
            <script type="text/javascript">
            // reload the contents of the iframe
            function Reload () {
                var f = document.getElementById('the-front-end');
                f.src = f.src;
            }
            jQuery(document).ready( function($) {
                // inject other content to fill the void
                $('<div style="width:70%;"><input type="button" value="Reload front page" onclick="Reload();" style="float:right"><br /><iframe id="the-front-end" src="{$site}" frameborder="0" width="100%" height="700"></div>').insertBefore('#widgets-left');

                // removes the whole left side of the widgets page
                $('#widgets-left').remove();

            });     
            </script>
HTML;
    }
}
add_action('admin_footer-widgets.php', 'wpse_53398_script_printer');

重要:HTML;終了行できませんの前後には空白文字があります

PS:this Heredoc構文<<<HTML code HTML;は、WPSEで正しくフォーマットされたPHPを表示するコードを妨げています。しかし、コードはテスト済みで動作しています。

2
brasofilo

ウィジェットを削除する問題はより一般的です。開発者とエディタが同じバックエンドインタフェースを使用していることが原因です。ウィジェットを削除するのと同じような問題は - 間違ったサイズで画像を挿入する - デザイナーが意図していなかったフォントを追加する - 許されるより多くのメニュー項目を作成する..そしてもっと

解決策は簡単です、編集者に彼ら自身のインターフェースを与えてください。そしておそらくこれを行うための最善の方法は次のとおりです。このインターフェースをWebサイト自体のように見せる。このアプローチは私が「フロントエンドCMS」と呼ぶものです

フロントエンドエディタ プラグインはこれに使える無料のプラグインです。私自身、この哲学をもう少し詳しく説明したプラグインを書きました。 frontendcms.com 。しかし無料ではありません。

2
Carlo Roosen