publishpress/wordpress-reviews

显示五星评级横幅的库。

v1.1.20 2023-10-06 17:22 UTC

README

PublishPress WordPress Reviews 是一个用于显示请求五星级评价横幅的库。

安装

我们推荐使用 composer 添加此库作为需求。

$ composer require publishpress/wordpress-reviews

如何使用它

如果你的插件还没有加载 composer 的自动加载器,你需要添加以下代码

<?php

require_once 'vendor/autoload.php';

只有免费插件应该初始化这个库.

它可以在加载主 WordPress 插件的方法中实例化和初始化。

在实例化此库时,你必须传递三个参数

  • 插件 slug(与 WordPress 仓库 URL 中使用的相同)
  • 插件名称
  • 标志的 URL(可选)

配置免费插件中显示横幅的条件

默认情况下,当以下条件为真时显示横幅

is_admin() && current_user_can('edit_posts')

但你可以通过挂钩 <plugin_slug>_wp_reviews_allow_display_notice 指定自定义条件以显示横幅。

<?php

use PublishPress\WordPressReviews\ReviewsController;

class MyPlugin
{
    /**
    * @var  ReviewsController
    */
    private $reviewController;
    
    public function __construct()
    {
        $this->reviewController = new ReviewsController(
            'my-plugin',
            'My Plugin',
            MY_PLUGIN_URL . '/assets/img/logo.png'
        );
    }
    
    public function init()
    {
        // .......
        add_filter('my-plugin_wp_reviews_allow_display_notice', [$this, 'shouldDisplayBanner']);
        
        $this->reviewController->init();
    }
    
    public function shouldDisplayBanner($shouldDisplay)
    {
        global $pagenow;

        if (! is_admin() || ! current_user_can('edit_posts')) {
            return false;
        }

        if ($pagenow === 'admin.php' && isset($_GET['page'])) {
            if ($_GET['page'] === 'pp-page1') {
                return true;
            }

            if ($_GET['page'] === 'pp-page2') {
                return true;
            }
        }

        if ($pagenow === 'edit.php' && isset($_GET['post_type'])) {
            if ($_GET['post_type'] === 'pp_custom_post_type') {
                return true;
            }
        }

        return false;
    }
    
    // .......
}

配置专业插件中显示横幅的条件

如果专业插件有你想显示横幅的附加页面,请自由使用与免费插件相同的过滤器,但优先级更高。你可以选择覆盖免费插件中使用的条件,或为不同页面附加更多条件。

add_filter('my-plugin_wp_reviews_allow_display_notice', [$this, 'shouldDisplayBanner'], 20);
 /**
 * @param $shouldDisplay
 * @return bool|null
 */
public function shouldDisplayBanner($shouldDisplay)
{
    global $pagenow;

    if ($shouldDisplay) {
        return true;
    }
    
    if ($pagenow === 'edit.php' && isset($_GET['post_type'])) {
        if ($_GET['post_type'] === 'custom-posttype') {
            return true;
        }
    }

    return $shouldDisplay;
}

与旧版本的后向兼容性

默认情况下,库将使用插件的 slug 作为动作、元数据和选项的前缀。

[
    'action_ajax_handler' => $this->pluginSlug . '_action',
    'option_installed_on' => $this->pluginSlug . '_wp_reviews_installed_on',
    'nonce_action' => $this->pluginSlug . '_wp_reviews_action',
    'user_meta_dismissed_triggers' => '_' . $this->pluginSlug . '_wp_reviews_dismissed_triggers',
    'user_meta_last_dismissed' => '_' . $this->pluginSlug . '_wp_reviews_last_dismissed',
    'user_meta_already_did' => '_' . $this->pluginSlug . '_wp_reviews_already_did',
    'filter_triggers' => $this->pluginSlug . '_wp_reviews_triggers',
]

如果你已经在你的插件中使用原始库,并希望与当前站点的数据保持兼容性,你可以使用过滤器 <plugin_slug>_wp_reviews_meta_map 自定义存储在数据库中的数据的钩子和键。

<?php

add_filter('my-plugin_wp_reviews_meta_map', 'my_plugin_wp_reviews_meta_map');

function my_plugin_wp_reviews_meta_map($metaMap)
{
    // You can override all the array, or specific keys.
    $metaMap = [
        'action_ajax_handler' => 'legacy_slug_ajax_action',
        'option_installed_on' => 'legacy_slug_wp_reviews_installed_on',
        'nonce_action' => 'legacy_slug_wp_reviews_action',
        'user_meta_dismissed_triggers' => '_legacy_slug_wp_reviews_dismissed_triggers',
        'user_meta_last_dismissed' => '_legacy_slug_wp_reviews_last_dismissed',
        'user_meta_already_did' => '_legacy_slug_wp_reviews_already_did',
        'filter_triggers' => 'legacy_slug_wp_reviews_triggers',
    ];

    return $metaMap;
}

常见问题

我应该在使用专业插件上使用此库吗?

嵌入免费插件代码的专业插件 不应实例化或初始化此库,否则,用户可能会看到重复的管理员通知或被要求进行两次评价。

仅通过免费插件激活库允许免费和专业版本共享数据库中存储的相同选项和元数据,避免重复横幅或评价请求。

请,仅初始化免费插件中的此库,不要在专业版本中禁用或阻止它。我们希望为免费和专业用户都保持启用状态。

测试

您可以通过更改选项表中的 <plugin-slug>_wp_reviews_installed_on 选项来在 WordPress 管理员中测试横幅。将其设置为旧数据以确保时间差大于所选触发器。

版权

基于由 Daniel Iser 创建的