Individual Widgets per Page

时间:2012-12-19 作者:Frank Nocke

在我的Wordpress网站(仅限于页面,无帖子)中,我需要在侧边栏中放置一些静态blob。我们可以将这些“blob”称为小部件。至少他们会有一个固定的html内容,如“摘要1”、“摘要2”、“免责声明”、“foo策略”。。。

我需要的是,在每一页上都有不同的安排。因此,这不仅仅是“单一”对“归档”,而是真正的“产品页面A”对“产品页面B”对“关于我们”对“服务条款”。。。

我在考虑自定义元框,以便在单个编辑器页面上打开和关闭它们wp-admin/post.php?post=196&action=edit, 当然,常规小部件的拖放舒适性和简单的订单确定会更好。

此外,我不确定如何维护(添加、删除、编辑(html文本视图将完成)这些静态片段。。。

对于我的用户来说,将其放在单独的编辑页面上会更直观(wp-admin/post.php?post=123&action=edit) 检查“我想要小部件1、2、5、8”,而不是去相应的小部件/代码段,告诉他“你必须出现在以下页面”,我理解这是一种方式Display Widgets 作品

因此,理想情况下,我会有一个小部件(或模块或代码片段)首选项页面,在那里我可以添加/编辑/删除小部件。然后在单独的编辑页面上,在右侧的元框中添加并按顺序拖动它们。

7 个回复
最合适的回答,由SO网友:Lucas García 整理而成

您可以使用Widget Context 插件或Widget Logic 插件。

它们工作得很好。我更喜欢Widget上下文,因为它有更多的灵活性。

SO网友:kat_indo

使用一些简单的插件怎么样。

我正在使用Widgets Controller 这是个好主意。

一个插件,可以控制在WordPress类别、帖子和页面上显示或隐藏小部件。

SO网友:Amit

此插件http://wordpress.org/extend/plugins/wp-page-widget/ 非常好,这里有一些截图和更多信息http://codeandmore.com/products/wordpress-plugins/wp-page-widget/.在相当多的网站上使用它,从未出现过任何问题。

最好的是,您实际上可以在页面的编辑屏幕上管理每个特定页面的小部件,而无需转到小部件区域。

SO网友:webaware

我在一个网站上为一个特定的模板做了这个。具有该模板的任何页面都有自己的小部件区域,允许专门针对该页面的一个或多个小部件。有几个插件可以为您提供动态小部件逻辑,但这种方法更有针对性,可能适合您的问题(它在特定的网站上也有)。

对于管理员,小部件区域必须全部注册,以便您可以为这些页面分配和配置小部件:

// dynamically add some widget zones for pages using some templates
add_action(\'sidebar_admin_setup\', \'wpse_76601_actionSidebarAdminSetup\');

/**
* handle action sidebar_admin_setup to check for dynamically created sidebars
* and make sure they\'re registered
*/
function wpse_76601_actionSidebarAdminSetup() {
    global $post;
    global $wp_registered_sidebars;

    // find all pages that use template with dynamic widget zone
    $query = new WP_Query(array(
        \'meta_key\' => \'_wp_page_template\',
        \'meta_value\' => \'wpse-template-dept.php\',
        \'post_type\' => \'page\',
        \'nopaging\' => true,
        \'orderby\' => \'title\',
        \'order\' => \'ASC\',
    ));

    while ($query->have_posts()) {
        $query->the_post();

        $id = "wpse-{$post->ID}-aside";

        // register any that aren\'t already registered
        if (!isset($wp_registered_sidebars[$id])) {
            register_sidebar( array(
                \'name\' => $post->post_title . \' Asides\',
                \'id\' => $id,
                \'description\' => \'Aside widgets for page \' . $post->post_title,
                \'before_widget\' => \'<li id="%1$s" class="widget-container %2$s">\',
                \'after_widget\' => \'</li>\',
                \'before_title\' => \'<h3 class="widget-title">\',
                \'after_title\' => \'</h3>\',
            ) );
        }
    }
    wp_reset_postdata();
}
然后在页面模板中,小部件区域必须在调用之前再次注册;只需在调用之前在模板顶部添加wp_head(), 它将只注册该特定页面。

function template_widgetsInit() {
    global $post;

    register_sidebar( array(
        \'name\' => $post->post_title . \' Asides\',
        \'id\' => "wpse-{$post->ID}-aside",
        \'description\' => "Aside widgets for page {$post->post_title}",
        \'before_widget\' => \'<li id="%1$s" class="widget-container %2$s">\',
        \'after_widget\' => \'</li>\',
        \'before_title\' => \'<h3 class="widget-title">\',
        \'after_title\' => \'</h3>\',
    ) );
}
template_widgetsInit();

SO网友:GhostToast

您是在谈论对它们进行重新排序,还是简单地切换每页显示哪一个?您当然可以添加一个分类法,并让每个小部件监听该术语的存在(例如,在sidebar.php中)。

例如,注册的分类法可以称为“Widget Presence”,并具有Widget 1、Widget 3、About Us Text、Foo Bar等术语。

页面将选择其拥有的术语。

在侧栏中,您可以使用一些条件语句来检查任何给定页面具有哪些术语,并加载相关的模板部分或特定小部件或代码块。有意义吗?

如果你想提供更多细节,我可以准备一个更具体的例子。

SO网友:Don Zacharias

难道不能每个页面都有不同的页面模板,并且每个页面模板都有不同的菜单吗?我假设您可以创建的菜单数量是有限制的,这将是最大的限制。

SO网友:Leon Francis Shelhamer

我已经建立了一个具有这些相同需求的网站。实际上我只是使用插件“Widget Logic”

http://wordpress.org/extend/plugins/widget-logic/

它在每个接受Wordpress条件标记的小部件上创建文本字段。如果需要重新排序,我会在不同的位置创建多个所需的小部件。这是一个很快很容易解决的问题。

利昂

结束