小工具未显示在页面上

时间:2015-06-16 12:14:26

标签: php wordpress widget

我目前正在编写自己的单页wordpress主题(基于下划线),我正在尝试将小部件添加到页面中,因此这个小部件将显示在我的主页上。

我用这个页面作为我的向导; http://codex.wordpress.org/Widgetizing_Themes但是小部件没有显示在我的主页上。

我采取的步骤: 1.创建自定义页面模板,这是代码:

<?php
/*
Template Name: Widget Page
*/

get_header(); ?>

    <div id="primary" class="content-area">

    <?php putRevSlider("video","homepage") ?>

        <main id="main" class="site-main" role="main">

            <?php dynamic_sidebar( 'widget-page' ); ?>

        </main><!-- #main -->
    </div><!-- #primary -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>

似乎工作正常,我可以选择模板,我的页面内容显示在主页上。 (参见测试小部件,测试测试)

我也在那里添加了调用小部件的行,正如你所知道的那样。

然后我把它添加到我的functions.php;

/**
 * Register our sidebars and widgetized areas.
 *
 */
function arphabet_widgets_init() {

    register_sidebar( array(
        'name'          => 'Widget Page',
        'id'            => 'widget-page',
        'before_widget' => '<div>',
        'after_widget'  => '</div>',
    ) );

}
add_action( 'widgets_init', 'arphabet_widgets_init' );

而且我认为这就是出错的地方?提到侧边栏会让我感到困惑,因为这应该出现在页面上。 wp指南还提到了一个代码,它检查侧边栏是否处于活动状态,但由于我没有将它放在侧边栏中,我不确定是否应该使用它?我尝试使用这个部分,但也没有用,这就是为什么我认为问题将在functions.php文件中。下划线框架还附带了自己的widget代码,这会导致问题吗?

/**
 * Register widget area.
 *
 * @link http://codex.wordpress.org/Function_Reference/register_sidebar
 */
function otto_widgets_init() {
    register_sidebar( array(
        'name'          => esc_html__( 'Sidebar', 'otto' ),
        'id'            => 'sidebar-1',
        'description'   => '',
        'before_widget' => '<aside id="%1$s" class="widget %2$s">',
        'after_widget'  => '</aside>',
        'before_title'  => '<h1 class="widget-title">',
        'after_title'   => '</h1>',
    ) );
}
add_action( 'widgets_init', 'otto_widgets_init' );

这是我页面的链接; http://kellyvuijst.nl/onepage/

先谢谢!

1 个答案:

答案 0 :(得分:0)

经过一些谷歌搜索后,我发现让窗口小部件出现在页面中的最简单方法是确保您可以缩短代码窗口小部件,然后只需将短代码添加到页面中。无需自定义模板。

这是我在functions.php;

中使用的代码
function widget($atts) {

    global $wp_widget_factory;

    extract(shortcode_atts(array(
        'widget_name' => FALSE
    ), $atts));

    $widget_name = wp_specialchars($widget_name);

    if (!is_a($wp_widget_factory->widgets[$widget_name], 'WP_Widget')):
        $wp_class = 'WP_Widget_'.ucwords(strtolower($class));

        if (!is_a($wp_widget_factory->widgets[$wp_class], 'WP_Widget')):
            return '<p>'.sprintf(__("%s: Widget class not found. Make sure this widget exists and the class name is correct"),'<strong>'.$class.'</strong>').'</p>';
        else:
            $class = $wp_class;
        endif;
    endif;

    ob_start();
    the_widget($widget_name, $instance, array('widget_id'=>'arbitrary-instance-'.$id,
        'before_widget' => '',
        'after_widget' => '',
        'before_title' => '',
        'after_title' => ''
    ));
    $output = ob_get_contents();
    ob_end_clean();
    return $output;

}
add_shortcode('widget','widget'); 

我感谢到了; https://digwp.com/2010/04/call-widget-with-shortcode/

问题解决了!