0

私はWordPressの基本を学んでいるところですが、何かをする方法を知りたいです。

テンプレートの概念を理解しています。単一のテンプレートで実行される複数のページを作成して、サイト全体で一貫したルックアンドフィールを実現できます。

phpファイルで、次のようなコードを使用して、たとえばproduct.phpをテンプレートとして宣言します。

/*
Template Name: Products
*/

これは、新しいページを作成するときに、管理領域でテンプレートオプションとして使用できるようになります。

しかし、私が理解するのに苦労しているのは次のとおりです。

一部のページは、その構造が完全にユニークです。テンプレートから逃げ出してほしくない。この背後にある主な理由は、エンドユーザーが誤って管理セクションのテンプレートを上書きする可能性があるためだと思います。可能な限りこれを最小限に抑えたいと思います。

また、そのようなページと私を混乱させるのは、WP管理セクション内にページを作成する必要がありますか、それとも必要な方法を使用して、ページセクションの下に自動的に表示されますか?

誰かがこれがWordPressでどのように行われるかを説明できますか?

お時間を割いていただき、ありがとうございます。

4

3 に答える 3

1

WordPressのすべてのページは、ある種のテンプレートで実行されます。テンプレートがなかったら、運が悪かったでしょう。なぜなら、データはどこに行くのでしょうか?クライアントが物事を壊さないようにするために、クライアントが単にテキストなどを編集し、ページの構造に手を出さないようにテンプレートを作成します(テンプレートの作成ではそれをあなたに任せます)。

私は以前に最大10の異なるテンプレートを持つサイトを持っていました。特定のページが独自の情報アーキテクチャを持っているという理由だけで。テンプレートが必要な場合は、他に方法がない場合があるため、恐れずにテンプレートを追加してください。

これが最善のアドバイスかどうかはわかりませんが、クライアントがページテンプレートをいじり始めるのではないかと正直に心配している場合は、JavaScriptを作成して、管理者かどうかを確認します。テンプレートを変更できる要素を非表示にします。

ユーザーに特定のテンプレートを表示させたくない場合、またはユーザーに特定のテンプレートファイルを表示させたくない場合は、functions.phpにこれを配置できます。

function add_jquery_admin() {
    global $parent_file;

    // if editing page in WP admin and user is not an admin
    if ( isset( $_GET['action'] ) && $_GET['action'] == 'edit' && isset( $_GET['post'] ) && $parent_file == 'edit.php' && !current_user_can('manage_options')) {

        // remove the options for each of the templates on the template select element
        echo '
        <script>
            var q = jQuery.noConflict();
            q(function(){
                q("#page_template option[value=\"template-file-name-1.php\"]").remove();
                q("#page_template option[value=\"template-file-name-2.php\"]").remove();
                q("#page_template option[value=\"template-file-name-3.php\"]").remove();
            });
        </script>
        ';

        // get current post id
        $post_id = $_GET['post'];

        // if the post id 123, 1234, or 12345 
        if ( $post_id == 123 || $post_id == 1234 || $post_id == 12345 ) { // if on one of these post ids disable the template selector

            // disable the page template select element
            echo '
            <script>
            var j = jQuery.noConflict();
            j(function(){
                j("#page_template").attr("disabled", "disabled"); 
            });
            </script>
            ';
        }
    }
}

add_filter('admin_head', 'add_jquery_admin');

私はテストしませんでしたが、大丈夫だと思います。これらが表示されているテンプレートファイル名を切り替える必要があります- q("#page_template option[value=\"template-file-name-1.php\"]").remove();

また、テンプレートの選択要素を表示したくないページごとに、一意の投稿IDを収集する必要があります。あなたはURLを見ることによってそれを得ることができるでしょう-それはpost=200URLのように何かを言うでしょう。これらをここに入れます- if ( $post_id == 123 || $post_id == 1234 || $post_id == 12345 )

これはちょっと面倒なことのように思えますが、他の解決策を考えることも見つけることもできませんでした。

于 2013-01-23T21:17:58.957 に答える
1

他の誰かがこれが役に立つと思うことを願っています。まだ試していませんが、convention page-.phpという名前のファイルを作成すると、そのスラッグのあるページに自動的に読み込まれることがわかりました。

私はそれが可能でなければならないことを知っていました。すべての貢献に感謝します。

于 2013-01-23T21:39:50.167 に答える
-1

カイルが言うように。ページテンプレートでそれを行います。彼らを失うものは何もありません。phpファイルを作成した後、wp-adminパネルでページを追加できます。

于 2013-01-23T21:20:21.007 に答える