質問: 0){ echo "<h1>widget #".($i/3)."</h1>"; the_widget($widgets['homepage-1'][$i/3]); // this does not works since i'm not giving the class name. how to retrieve it? } get_template_part( 'content', get_post_format() ); $i++; ?> <?php endwhile; ?> <?php _s_paging_nav(); ?> <?php else : ?> <?php get_template_part( 'content', 'none' ); ?> <?php endif; ?>
回答: 私は質問の核心を「......ウィジェットクラス名を取得できません」としています。不足している情報を入力するには、global変数$wp_registered_widgetsを確認する必要があります。この概念実証コードはあなたにアイデアを与えるはずです。コードはsidebar-1という名前のサイドバーを想定しています。調整する必要があります。global $wp_registered_widgets; $widgets = wp_get_sidebars_widgets(); var_dump($widgets['sidebar-1']); // dump the data foreach ($widgets['sidebar-1'] as $widget) { var_dump($wp_registered_widgets[$widget]); // dump the data } より多くのガイダンスとして、 dynamic_sidebarがどのように機能するかを見てください 、これは基本的に私が上記を解決するためにしたことです。テストされていませんが、これは私がいくつかのより完全なコードをモックアップするのに十分興味深いものでした:global $wp_registered_widgets; $i = 1; $widgets = wp_get_sidebars_widgets(); $widgets = $widgets['homepage-1']; if ( have_posts() ) { while ( have_posts() ) { the_post(); if ($i%3 == 0){ echo "<h1>widget #".($i%3)."</h1>"; $cn = $wp_registered_widgets[$widgets[$i%3]]['callback'][0]; $cn = get_class($cn); the_widget($cn,$widgets[$i%3]); } get_template_part( 'content', get_post_format() ); $i++; } _s_paging_nav(); } else { get_template_part( 'content', 'none' ); }