web-dev-qa-db-ja.com

カスタム管理メニューページの[詳細カスタムフィールドを生成]ボックス

add_menu_page関数を使用してFCC Youtubeというカスタム管理メニューページを作成しました。これには、HTMLおよびPHPを介して手動で生成したカスタムフィールドがいくつかあります。

コード(このカスタム管理者メニューページの作成方法の一部)

// creat admin menu page 
add_action("admin_menu","youtube_menu");
function youtube_menu() {
        add_menu_page('Youtube Channel Settings', 'FCC Youtube', 'edit_pages', 'youtube_channel_settings', 'youtube_channel_render_page','http://fcc.sportingpulse.com/wp-content/uploads/2013/04/youtube_icon16x16.png');
        add_action('admin_init','youtube_regsettings');
    }

see image

私が作成したFCC Youtubeページのように、多くの管理メニューページを作成したいです。 (FCC Vimeo、FCCボタンなど)

これらのページにACFフィールドグループがあるといいのですが。つまり、ACFフィールドグループを作成し、そのグループをカスタム管理メニューページに割り当てることができます。これは、ACFオプションアドオンページとまったく同じように機能します。

ACF Option-addonでは、トップレベルのオプションページを複数作成することはできません。私は複数のセカンドレベルのオプションページを作成することができることを理解していますが、私は多くのトップレベルのものを持ちたいのですが、私はまだこれを行う方法を理解することができません!

Optionアドオンを購入しましたが、複数の "トップレベル"オプションページを作成することはできません。 "Options"という名前の親ページしかなく、その下に多数のサブページがあります。 「レベル」ページには「オプション」以外の名前がありますが、実行するのが非常に難しいようです。

これを見て enter image description here

私は、親の「オプション」の下にオプションページのこれらすべての束があります、私は親の外にそれらを動かすことができません

enter image description here

3
Ray Tsai

おもしろい演習、 1ページ 最初のレベルのメニューページに値すると信じるプラグインは間違っている、IMO。私はJetpackでも同じテクニックを使います。

Options Pageアドオンでサブページを作成するには、 ドキュメントを読んでください

このメニュー/サブメニューの交換のロジックは次のとおりです。

  1. 複数のACFオプションページを追加する
  2. メニューの第一レベルページを作成する
  3. プラグインページを削除(非表示)する
  4. プラグインページをACFに追加(移動)します

ステップ1と2は、この例を汎用にすることです。
他のプラグインと一緒に使用するには、ステップ3と4だけが必要です。スラッグを調整します。
デフォルトのWPメニューに移動するには、たとえば、 add_theme_page (外観)または add_options_page (設定)を使用します。

<?php
/**
 * Plugin Name: Swap Menus and Sub-menus
 * Plugin URI: http://wordpress.stackexchange.com/q/95981/12615
 * Author: brasofilo
 * Author URI: http://wordpress.stackexchange.com/users/12615/brasofilo
 * Licence: GPLv2 or later
 */

class Swap_Menus_WPSE_95981 {

    function __construct()
    {
        add_action( 'plugins_loaded', array( $this, 'modify_menus' ) );
    }

    function modify_menus() 
    {
        // 1) Add ACF Options pages
        if( function_exists( "register_options_page" ) )
        {
            register_options_page( 'Header' );
            register_options_page( 'Footer' );
        }

        // 2) Create this plugin page
        add_action( 'admin_menu', array( $this, 'add_aux_menu' ) );

        // 3) Remove (hide) this plugin page
        add_action( 'admin_init', array( $this, 'remove_aux_menu' ) );

        // 4) Move this plugin page into ACF Options page
        // Priority here (9999) is to put the submenu at last postition
        // If the priority is removed, the submenu is put at first position
        add_action( 'admin_menu', array( $this, 'add_aux_menu_again'), 9999 );
    }

    function add_aux_menu() 
    {
        add_menu_page(
            'Dummy Page First Level', 
            'Dummy Title', 
            'edit_posts', 
            'dummy-page-slug', 
            array( $this, 'menu_page_content' )
        );
    }

    function menu_page_content() 
    {
        ?>
            <div id="icon-post" class="icon32"></div>
            <h2>Dummy Page</h2>
            <p> Lorem ipsum</p>
        <?php
    }

    function remove_aux_menu() 
    {
        remove_menu_page( 'dummy-page-slug' ); 
    }


    function add_aux_menu_again() 
    {
        // To move into default pages, f.ex., use add_theme_page or add_options_page
        add_submenu_page(
            'acf-options-header', // <---- Destination menu slug
            'Dummy Page Second Level', 
            'Dummy Page Second Level', 
            'edit_posts', 
            'dummy-page-slug', 
            array( $this, 'menu_page_content' )
        );
    }
}

new Swap_Menus_WPSE_95981();
3
brasofilo