这个WordPress插件(Thrive评论)如何应用他们的定制评论排序?

时间:2020-09-25 作者:Ben Turner

我正在建立一个使用WordPress插件Thrive评论的网站。

它允许人们按排名靠前、最新或最老的方式对评论进行排序。

深入研究代码,我可以看到Top Rated是基于默认WordPress进行排序的comment_karma 领域

我想更改它,以便根据我创建的名为confidence_rank_cached.

Thrive Comments插件有一个名为tcm_get_localization_parameters 我认为这是将PHP数据发送到前端,以便JavaScript排序脚本可以使用它。

以下是该功能的完整副本:

/**
 * Get params to be used in javascript
 *
 * @return array
 */
public function tcm_get_localization_parameters() {
    $post    = $this->post_for_localization();
    $post_id = empty( $post[\'ID\'] ) ? 0 : $post[\'ID\'];

    $localization = array(
        \'current_user\'               => tcmh()->tcm_get_current_user(),
        \'translations\'               => include tcm()->plugin_path( \'includes/i18n.php\' ),
        \'nonce\'                      => $this->create_nonce(),
        \'routes\'                     => array(
            \'comments\'               => tcm()->tcm_get_route_url( \'comments\' ),
            \'gravatar\'               => tcm()->tcm_get_route_url( \'comments\' ) . \'/gravatar\',
            \'live_update\'            => tcm()->tcm_get_route_url( \'comments\' ) . \'/live_update\',
            \'update_post_subscriber\' => tcm()->tcm_get_route_url( \'comments\' ) . \'/update_post_subscriber\',
            \'generate_nonce\'         => admin_url( \'admin-ajax.php\' ),
        ),
        \'post\'                       => $post,
        \'related_posts\'              => tcmc()->get_related_posts( Thrive_Comments_Constants::TCM_NO_RELATED_POSTS, $args = array() ),
        \'const\'                      => array(
            \'toast_timeout\' => Thrive_Comments_Constants::TCM_TOAST_TIMEOUT, // Not sure if we really need this.
            \'wp_content\'    => rtrim( WP_CONTENT_URL, \'/\' ) . \'/\',
            \'ajax_dash\'     => array( Thrive_Comments_Constants::TCM_AJAX_DASH ),
            \'site_url\'      => get_site_url(),
            \'post_url\'      => apply_filters( \'tcm_post_url\', get_permalink() ),
            \'moderation\'    => array(
                \'approve\'              => Thrive_Comments_Constants::TCM_APPROVE,
                \'unapprove\'            => Thrive_Comments_Constants::TCM_UNAPPROVE,
                \'spam\'                 => Thrive_Comments_Constants::TCM_SPAM,
                \'unspam\'               => Thrive_Comments_Constants::TCM_UNSPAM,
                \'trash\'                => Thrive_Comments_Constants::TCM_TRASH,
                \'untrash\'              => Thrive_Comments_Constants::TCM_UNTRASH,
                \'unreplied\'            => Thrive_Comments_Constants::TCM_UNREPLIED,
                \'tcm_delegate\'         => Thrive_Comments_Constants::TCM_DELEGATE,
                \'tcm_featured\'         => Thrive_Comments_Constants::TCM_FEATURED,
                \'tcm_keyboard_tooltip\' => Thrive_Comments_Constants::TCM_KEYBOARD_TOOLTIP,
                \'featured\'             => Thrive_Comments_Constants::TCM_FEATURE_VALUE,
                \'not_featured\'         => Thrive_Comments_Constants::TCM_NOT_FEATURE_VALUE,
            ),
        ),
        \'settings\'                   => tcms()->tcm_get_settings(),
        \'close_comments\'             => tcms()->close_comments( $post_id ) || ! $this->tcm_show_comments(),
        \'sorting\'                    => tcms()->get_comment_sorting(),
        \'tcm_customize_labels\'       => tcms()->tcm_get_setting_by_name( Thrive_Comments_Constants::TCM_LABELS_KEY ),
        \'tcm_social_apis\'            => array(
            \'facebook\' => Thrive_Dash_List_Manager::credentials( \'facebook\' ),
            \'google\'   => Thrive_Dash_List_Manager::credentials( \'google\' ),
        ),
        \'email_services\'             => tcamh()->get_email_services(),
        \'tcm_accent_color\'           => tcms()->tcm_get_setting_by_name( Thrive_Comments_Constants::TCM_ACCENT_COLOR ),
        \'has_plugin_cache\'           => tve_dash_detect_cache_plugin(),
        \'default_author_picture_url\' => tcmh()->get_picture_url(),
    );

    /**
     * Filter for adding extra params for comments localization in fronted
     *
     * @param array $localization the already built localization by TC
     */
    return apply_filters( \'tcm_comments_localization\', $localization );
}
查看函数,您将看到它正在返回apply_filters( \'tcm_comments_localization\', $localization );.

所以我想我可以在里面装一个过滤器functions.php 我的孩子主题,使其按我的confidence_rank_cached 注释元数据字段,而不是默认的WordPresscomment_karma 领域

这是我在里面使用的代码functions.php:

function custom_change_top_ranking_comment_sort( $localization ) {
    $localization[\'sorting\'][\'sort_field\'] = \'confidence_rank_cached\';
    return $localization;
}
add_filter( \'tcm_comments_localization\', \'custom_change_top_ranking_comment_sort\', 10, 1 );
添加代码并检查加载帖子的源代码后,我可以看到JavaScriptsort_field 正在使用confidence_rank_cached 而不是comment_karma.

这很好,但排序工作不正常。当选择Top Rated作为排序选项时,它不会按我的confidence_rank_cached 元数据值。

我肯定我在这里的某个地方错过了一步。

我怀疑它不起作用,因为最初的JavaScript排序基于comment_karma 它来自主注释数据库表,现在我正在尝试使用它confidence_rank_cached 来自注释元数据表。。。但我对JavaScript和AJAX等还没有足够的理解来理解它。

有人能帮我看一下吗?

这里有一个实时的临时站点,您可以看到它的运行情况。我已在中禁用自定义代码functions.php 因此,您可以看到它的工作原理:https://wholesale-discussion.flywheelsites.com/new-post-test/

由于它还没有上线,您将需要这些登录详细信息来查看帖子。。。

用户名:explode密码:boomboom如果有帮助,这里有一份Thrive Comments前端JavaScript文件的副本。我将其缩小以便于阅读:https://pastebin.com/6NznyLKV

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

如何JS script 在页面加载时,脚本通过向位于的自定义WordPress REST API端点发出AJAX请求来加载帖子注释/tcm/v1/comments/<post ID> (here\'s a sample URL, valid as of writing).

然后脚本显示按sort_field 中定义的注释本地化参数中的值tcm_get_localization_parameters() (PHP)函数。因此,此时,您的自定义排序字段(名为confidence_rank_cached) 将按预期工作。

然而,当您选择;最高评级;选项,因为脚本(始终)将排序字段设置回comment_karma — 参见以下相关代码:

sortComments: function (a) {
    switch (a) {
        ...
        case "top-rated":
            (this.collection.compField = "comment_karma"), (this.collection.compOrder = -1);
    }
    ...
},

当;最高评级;选择选项更改上述内容comment_karmaconfidence_rank_cached.

是的,不建议修改(核心)插件文件,但我没有足够的时间彻底查看插件脚本<因此,要想找到一个比修改原始JS文件更好的解决方案,就得靠你了

将自定义元数据添加到上述REST API端点,并将元数据添加为根/顶层属性(即与comment_karma 字段)。

我不知道插件是否提供了一个特定的钩子来过滤REST API响应中的注释对象/数据,但您可以尝试使用get_comment hook 将自定义元数据添加到comment对象。

相关推荐

Page-slug.php不起作用,但仅适用于特定的插件

我正在尝试创建一个名为“的页面”;“漫画”;带着鼻涕虫“;“漫画”;用作我的网络经济网站的主目录。我已经创建了一个页面的漫画。然而,当我转到页面时,它只是链接回索引。php。当我尝试使用ID时,它也不起作用。当我尝试在其他slug和id中使用相同的格式时,效果很好,所以我知道WordPress工作正常。我认为这可能与我在函数中的某些内容相冲突。php,但是没有其他名称使用;“漫画”;(我已链接到下面的文件,供任何人查看)。我还尝试清理数据库中可能使用该slug的任何已删除项目,但一无所获。有人知道是什么导