希望创建自定义前端仪表板的“更新主题”功能

时间:2019-02-01 作者:Paul Elrich

我已经创建了一个主题,其中包括wp admin之外的自定义仪表板。

我想让一个没有wp管理员权限(但可以访问我的自定义仪表板)的用户能够收到主题的更新通知。

如果这是不可能的,我也可以与用户一起工作,只接收更新通知,并将其发送给wp管理员/主题。php,但这并不理想。

关于如何将该通知推送到前端,有什么想法吗?

编辑--此主题托管在私有GitHub repo上,更新随this plugin.

2 个回复
最合适的回答,由SO网友:Paul Elrich 整理而成

为了获得更新,我最终从主题加载了更新文本。php页面,请执行以下操作:

HTML:

<div id="ajax-test"></div>
jQuery:

    $(\'#ajax-test\').load(\'<?php bloginfo(\'url\'); ?>/wp-admin/themes.php .theme.active .update-message\', function(){
        $(\'#ajax-test\').append(\'<a class="update-now" href="<?php bloginfo(\'url\'); ?>/wp-admin/themes.php?theme=your-theme-name" target="_blank">Update Now</a>\');
        $(\'#ajax-test\').addClass(\'active\');
    });
除非找到更新,否则要隐藏的Css:

#ajax-test .button-link{
    display:none;
}
.update-now{
    display:none;
}
.update-message + .update-now{
    display:inline-block;
}
对于非管理员用户,您需要允许他们使用add_cap( $role, $cap ), 并设计出主题更新不需要的所有内容。

我可以看到这有两个问题:如果用户编辑CSS,他们可以使用仪表板导航,也可以更改主题。

我在我的函数中设置了重定向。仅允许在wp\\U admin中访问此页面的php:

$role = get_role( \'editor\' );
$role->add_cap( \'update_themes\' );
$role->add_cap( \'switch_themes\' );

add_action( \'init\', \'blockusers_init\' );

function blockusers_init() {
    if ( is_admin() && ! current_user_can( \'administrator\' ) && strpos($_SERVER[\'REQUEST_URI\'], \'wp-admin/themes.php\') == false && strpos($_SERVER[\'REQUEST_URI\'], \'wp-admin/update.php?action=upgrade-theme\') == false &&
! ( defined( \'DOING_AJAX\' ) && DOING_AJAX ) ) {
wp_redirect( home_url() );
exit;
};
对于主题更新,如果用户想要故意编辑html来构建自己的站点,我愿意让他们这样做。

也许这不是最优雅的解决方案,但这是我为我的情况找到的最佳选择。

SO网友:Milo

您可以添加一个REST端点来检查当前主题是否有更新。下面是一个快速入门的示例:

function wpd_register_themecheck_route(){
    register_rest_route(
        \'themecheck/v1\',
        \'/updates/\',
        array( 
            \'methods\' => \'GET\',
            \'callback\' => \'wpd_check_theme\'
        )
    );
}
add_action( \'rest_api_init\', \'wpd_register_themecheck_route\' );

function wpd_check_theme(){
    $current_theme = get_option( \'template\' );
    $theme_updates = get_option( \'_site_transient_update_themes\' );
    $return = false;
    if( array_key_exists( $current_theme, $theme_updates->response ) ){
        $return = $theme_updates->response[$current_theme];
    }
    $response = new WP_REST_Response( $return );
    return $response;
}

相关推荐

Theme Modified By Updates

大家好,祝贺您拥有信息丰富的网站。我已经下载了一个免费的WP主题,并成功地根据我的需要进行了修改。然后我发现,对原来的修改会影响修改后的修改。昨天,原始主题有更新,这是我手动不允许的。然而,今天早上我的主题已经改变了。颜色和字体恢复到原始状态。其他一切都保持了我创建它的方式(图片、徽标、布局、脚本)。我有几个问题:-这些是唯一的变化(颜色、字体)还是我应该期待其他变化-主题更新会影响我的徽标、图片和布局吗-有了这些更改,现在可以创建子主题了吗?非常感谢。顺致敬意,空气