私はカスタムホームページhome.phpのあるサイトを持っています。管理ツールで編集可能なホームページのオプションを表示する正しい方法は何ですか?
たとえば、ホームページには、管理ツールで編集可能なカスタムテキストフィールドがいくつかあります。管理者がこれらのオプションを変更できるようにこれを設定する最良の方法を探しています。
更新: /宣伝用の宣伝文句(テキスト文字列)の付いたホームページがあるサイトを想像してみてください。管理ユーザー(技術者ではない人)に簡単に更新させる必要があります。 「ホームページにはどのような宣伝文句が必要ですか。」[ _ __ _ __ _ __ _ ____ ] "?私はこれをウィジェット経由で行うことを考えましたが、そのルートはぎこちなく、単一のウィジェットを保持するためだけに特別なサイドバーを作成する必要があります。これにアプローチするための最良の方法は何ですか?
この問題には多くの解決策があります。そして、それらすべてが正しいと思います。それはあなたが本当に欲しいものと、このページのユーザー/管理者にとって最も親切/明確になるものによります。
私は通常これを解決するために3つの方法を使います。私はどれを選びましたか?状況によります。時々私はそれらの2つを同時に使用します。
静的ページをフロントページに設定できる場合はそれを行います。それからfront-page.php
ページテンプレートを作成し、それを使ってホームページ/フロントページの外観を定義します。
このページのカスタムフィールドを表示/編集するには、 Advanced Custom Fields pluginを使用します。それはあなたがフロントページに設定されたカスタムフィールドを定義することを可能にします。それからfront-page.php
テンプレートを使ってこれらのカスタムフィールドの値を表示します。
これらの値の一部をすべてのページ(フッター、ヘッダーなど)で繰り返す必要がある場合は、次のようにホームページからこれらの値を取得します。
$cf_value = get_post_meta( get_option('page_on_front'), '<CUSTOM FIELD NAME>', true );
他のページで繰り返すべきフィールドがそれほど多くない場合は、非常に簡単でクリーンな解決策です。それはユーザーフレンドリーですね。あなたがホームページを編集したいのなら、あなたはただ行ってそれをしなければなりません - あなたはホームページエディタですべてを編集することができます。
私が使用する他の解決策はいくつかのテーマオプションを定義することです。ページの外観(ロゴ画像、背景など)を定義し、コンテンツだけでなく(特に1ページのみのコンテンツを意味する場合)は、はるかに優れています。
私は通常これを行うために OptionTree pluginを使用します。しかし、これを自分で行うのはそれほど難しくありません。
テーマオプションでページのコンテンツを編集する必要があるという考えはあまり好きではないので、このソリューションはあまり使用しません。
ホームページだけでなく、すべてのページ(またはそれらのほとんど)にいくつかの値を表示する必要がある場合があります。それから、「最も良い」解決策は、これらの領域をサイドバーとして定義し、ユーザーがウィジェットを使用してそれらを編集できるようにすることです。
この繰り返しコンテンツが1行だけ(フッターの著作権情報行など)で、それほど頻繁に変更されない場合は、おそらく解決策1を使用します。ベストだと思います。
Home.phpページテンプレート用のメタボックスを作成することをお勧めします。これはAdvanced Custom Fields(ACF)プラグインを使って簡単に行えます。プラグインを使用する代わりに、これらをあなたのテーマに組み入れたいのであれば、 "ACF Lite"を使用することもできます。これはあなたが探しているものを正確に実装するための迅速で簡単な方法です。
メタボックスを構築し、5分以内にカスタムスタイルの出力をテンプレートファイルに作成することができました。これが私が使ったコードと、ステップバイステップのプロセスです。
アクティブなテーマの "function.php"ファイルにラベル付きの "functions.php"というコードブロックを追加します。
if(function_exists("register_field_group"))
{
register_field_group(array (
'id' => 'acf_home-page-promotional-text',
'title' => 'Home Page Promotional Text',
'fields' => array (
array (
'default_value' => '',
'formatting' => 'none',
'key' => 'field_51c5184b7c590',
'label' => 'Promo Text',
'name' => 'promo_text',
'type' => 'text',
'instructions' => 'What promotional text would you like?',
),
),
'location' => array (
array (
array (
'param' => 'page_template',
'operator' => '==',
'value' => 'home.php',
'order_no' => 0,
'group_no' => 0,
),
),
),
'options' => array (
'position' => 'normal',
'layout' => 'no_box', // change 'no_box' to 'default' for box look.
'hide_on_screen' => array (
),
),
'menu_order' => 0,
));
}
ホームページに移動します(このページはhome.phpテンプレートファイルのEdit Page - > Attributes - > Templateドロップダウンを使用している必要があります)。
あなたの "home.php"テンプレートファイルに行き、この例では "promo_text"の "名前"が与えられているカスタムメタボックスの内容を表示するために次のコードを追加してください。
<?php if( get_field('promo_text') ) { ?>
<h3>
<?php echo get_field('promo_text'); ?>
</h3>
<?php } ?>
注意:get_fieldはACFプラグインからの関数です。 WP組み込み関数を使いたい場合は、「get_post_meta($ post_id、$ key、$ single);」を使用します。代わりに。その一例です。
<?php
if( get_post_meta($post->ID, $'promo_text', true) ) { ?>
<h3>
<?php echo get_post_meta($post->ID, 'promo_text', true); ?>
</h3>
<?php } ?>
ホームページを編集したときの外観は次のとおりです。 より大きな画像リンク
メタボックスが見えます。あなたがプラグインなしでこれを容易にすることができることに注意してください、あなたはちょうどあなたのテーマフォルダにプラグインフォルダを含めて、あなたのアクティブなテーマのfunctions.phpファイルにinclude()を追加する必要があります。
私はこのプラグインを強くお勧めします...とても直感的で、たくさんのドキュメントがあります。このプラグインとvar_dump()を使えば、すべてを素早く見つけることができます。
これが役に立つことを願っています!
あなたの質問からあなたがしていることを正確に言うのは難しいですが、もしあなたが Options API を使っているなら、 get_option
はデフォルト値の2番目のパラメータを受け入れます。コーデックスから:
$no_exists_value = get_option('no_exists_value');
var_dump($no_exists_value); /* ouput false */
$no_exists_value = get_option('no_exists_value','default_value');
var_dump($no_exists_value); /* output default_value */
テーマカスタマイズAPI を使用している場合、 get_theme_mod
は、get_option
と同様に、デフォルト値の2番目のパラメーターも受け入れます。
どちらの方法でも、バックエンドインターフェースを作成する必要があります。 Options APIを使用する場合は、設定ページ add_menu_page
および/または add_submenu_page
、または これらの関連する関数の1つ を作成します。
あなたがテーマカスタマイザを使っていて、それがあなたのプロジェクトに合っているかどうか私にはわかりません、 関数とテクニックのまったく異なるセットがあります 。
私がそれに近づく方法は(そして私は今も似たようなものを持っています)、次のとおりです。
[設定]メニュー([設定] - > [ホームページ設定])のいずれかで新しいメニューエントリを作成するか、[コメント]の下など、新しいメニュー項目を作成します。それからその新しいメニュー項目で、あなたのページを作成してください。
手順1で説明したページで、ホームページの現在の管理設定(現在および将来の設定)をすべて作成します。
ページ(およびそのメニューリンク)がロールチェックを介して管理ユーザーにのみ利用可能であることを確認してください
お望みであれば、特別な設定ページを作成するプラグインの一部として上記のソリューションを作成し、それをテーマから移動することができます。これはテーマに関連した問題ではなく、管理領域の正当化です。
私のために、私が先に述べたように、私はそれらの線に沿って何かを話していて、プラグインを作成しました。私のテーマを変更したいのであれば、これは将来的に私を助けてくれます。削除してコードの中に入れておく必要があるものについて調べる必要はありません。
お役に立てれば。
私があなたの質問を正しく理解していれば、WordPress管理者のようにテーマオプションパネルを作成したいと思います。 (たとえば)「こんにちは、世界!」と入力できます。テキストボックスに変更を保存と入力し、Webサイトのフロントエンドにある「こんにちは、世界」と入力します。あなたがあなたのテンプレートの中でそれを呼ぶことに決めたところはどこでも表示されるでしょう。
s_ha_dum のようにOptions APIを使ってこれを行うことができますが、私の考えでは、彼の答えに十分な詳細が含まれていないと思ったのでしょう。
だからあなたへの私の忠告はあなたが "あなたが欲しい宣伝テキストが欲しいです"と言うテキストフィールドを持つテーマオプションパネルを(すばやくそして簡単に)作成することを可能にする Option Tree pluginをインストールすることになるでしょうホームページは? "それから、あなたがしなければならないのは、Option Tree関数を使って、あなたのhome.phpテンプレートのそのオプションの値を呼び出すことだけです。
お役に立てれば!