web-dev-qa-db-ja.com

ページではなくメタに基づいてサイドバーを作成する方法について何かの指示が必要です。

私は、ユーザーが「ページ/投稿タイプ」を作成し、タイプスタイルをカスタマイズし、そしてそのタイプでページ/投稿をタグ付けすることを可能にするプラグインに取り組んでいます。このすべての作品。私の問題は、このプラグインはそれらがそのタイプにウィジェットを添付できるようにする必要があるということです。

私はいつでも「タイプ」がいくつあるかを知る方法がありません。

プラグインは次のように機能します。

  • ユーザーがタイプを作成する(猫、犬、マウス)
  • ユーザはタイプの背景色、リンク色などを指定する
  • ユーザーはそのタイプのウィジェットを指定します

ページ/投稿が表示されると、そのページにタイプがあるかどうかが検出されます。もしそうなら、それはそのタイプにすべての関係のないデータを引き込む。

すべてが完璧に動作します。

サイドバーを登録する必要があることはわかっていますが、タイプがいくつあるかわからず、ユーザーが気軽に作成および削除できるため、各タイプに登録することはできません。

私の計画:

  • 「カスタムサイドバー」というサイドバーを登録する
  • 「ウィジェット」ページを模したページを作成する
  • ユーザーが「カスタムサイドバー」のそこにウィジェットを追加できるようにする
  • プラグインは "type"のIDに基づいてサイドバーのデータを格納します

サイドバー機能が私のプラグインに正しく溶け込まなければならないので、私は本当に別のプラグインを使うことができません。これがうまくいくかどうか、あるいはどこから始めればいいのかさえわかりません。正しい方向への任意のプッシュは素晴らしいでしょう!

2
dcp3450

サイドバーとそこに配置されたアイテムを作成しただけです。ドロップダウンボックスを追加して特別な場所を割り当てました。

0
dcp3450
  1. サイドバーを作成する$type . '_sidebar'
  2. サイドバー$type . '_sidebar'を登録します(例:dog_sidebar
  3. Widget.phpにGET引数として型を渡します(いくつかのメニューエントリを作成するか、他の場所にリンクする場所に作成します(例:wp-admin/widgets.php?sidebar_type=dog_sidebar))。
  4. notと表示されるべきサイドバーをすべて除外してください。あなたはこの機能を使用することができます:

      global $wp_registered_sidebars;
    
      $type =filter_input( INPUT_GET, 'sidebar_type', FILTER_SANITIZE_STRIPPED );
    
      if ( empty( $type ) )
        return;
    
      if ( isset( $wp_registered_sidebars[ $type ] ) ) {
        $keep = array( $type => $wp_registered_sidebars[ $type ] );
        $wp_registered_sidebars = array_intersect_key( $keep, $wp_registered_sidebars );
      }
    
    }
    
    add_action( 'sidebar_admin_setup', 'filter_sidebars', 1, 0 );
    

たとえば、Twenty 12には、3つの登録済みサイドバー(サイドバーID)があります:sidebar-1、sidebar-2、およびsidebar-3です。ここでyour-blogdoma.in/wp-admin/widgets.php?sidebar_type=sidebar-3に移動すると、残りの3番目のサイドバーだけが残ります(ID sidebar-3)。

サイドバーdog_sidebarを登録してyour-blogdoma.in/wp-admin/widgets.php?sidebar_type=dog_sidebarにアクセスした場合、唯一の表示されるサイドバーは 'Dog Sidebar'(ID dog_sidebar)です。

プラグインは "type"のIDに基づいてサイドバーのデータを格納します

これをする必要はありません。すべてのサイドバーはそれ自身のデータを格納します。しかし、 "はサイドバーのデータを保存します"であなたが試みたことを誤解したかもしれません。

1
Ralf912