使用自定义代码时,WP链接回Discourse未显示

您好,

我遇到了一个问题,在 WordPress 端没有指向 Discourse 论坛的链接。我找到了一些关于此问题的论坛帖子,但只有一些答案:

  • 在 WP 管理员 → 插件部分,所有“文本内容”字段均已填写。
  • 同步运行正常;我可以在双方看到评论。
  • URL 字符串存在于 _postmeta 数据库表中

image

评论部分显示了通知:

**Notice**: Trying to access array offset on value of type null in **/home/u48255p44743/domains/fxweb.snowfreakz.nl/public_html/wp-content/plugins/wp-discourse/lib/discourse-comment-formatter.php** on line **90**
**Notice**: Trying to access array offset on value of type null in **/home/u48255p44743/domains/fxweb.snowfreakz.nl/public_html/wp-content/plugins/wp-discourse/lib/discourse-comment-formatter.php** on line **106**
**Notice**: Trying to access array offset on value of type null in **/home/u48255p44743/domains/fxweb.snowfreakz.nl/public_html/wp-content/plugins/wp-discourse/lib/discourse-comment-formatter.php** on line **127**
**Notice**: Trying to access array offset on value of type null in **/home/u48255p44743/domains/fxweb.snowfreakz.nl/public_html/wp-content/plugins/wp-discourse/lib/discourse-comment-formatter.php** on line **127**
**Notice**: Trying to access array offset on value of type null in **/home/u48255p44743/domains/fxweb.snowfreakz.nl/public_html/wp-content/plugins/wp-discourse/lib/discourse-comment-formatter.php** on line **148**
**Notice**: Trying to access array offset on value of type null in **/home/u48255p44743/domains/fxweb.snowfreakz.nl/public_html/wp-content/plugins/wp-discourse/lib/discourse-comment-formatter.php** on line **148**

这些都与文件中的 $URL 相关。我使用以下方式调用评论:

<?php
global $post;
use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
$discourse_comments = DiscourseUtilities::get_discourse_comments($post->ID);
echo $discourse_comments;
?>

示例 URL:
https://fxweb.snowfreakz.nl/nogmaals-een-test/
https://fxdisc.snowfreakz.nl/t/nogmaals-een-test/23/2

<?php
echo get_post_meta( $post->ID, 'discourse_permalink', true );
?>

将上面的直接调用放在这里,我没有得到任何链接(在另一个主题中找到的)

正在运行 Apache / PHP7.4 / WP 6.0.2
经过几个小时的故障排除,我已经没有办法了。也许有人能给点建议!?
提前感谢,

Joep

嘿 Joep,

如果这两件事都属实,那么您的网站存在其他问题(非 WP Discourse)。

这是最近才开始的吗?您最近在 WP 安装上还更改了其他什么吗?其他插件、主题、缓存等。

您好 Angus,

谢谢您的回复……这是一个“全新”的 WordPress 安装,运行着 Bricks 模板构建器,并且刚刚安装了 WPdiscourse 进行连接。除了 mod_headers 服务器缓存之外,没有其他激进的插件会修改任何脚本。

我刚刚再次添加了直接的 PHP 行,然后……神奇地出现了 URL。不知道我这次做了什么不一样的地方。

<?php
global $post;
use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
$discourse_comments = DiscourseUtilities::get_discourse_comments($post->ID);
echo $discourse_comments;

echo get_post_meta( $post->ID, 'discourse_permalink', true );
?>

但我仍然收到有关应构建 URL 的代码行的通知,并且“继续讨论于”之后的链接没有显示。

https://fxweb.snowfreakz.nl/nogmaals-een-test/

Joep

好的。为什么您要使用自己的自定义代码加载评论和永久链接?插件会为您处理这些。

您好,

当我包含“main”WordPress 评论(这是一个 Bricks 模板元素)时,它会显示“普通 WP 评论表单”,而不会被 Discourse 评论插件替换。请参见上面的 URL;我通过在博客下方添加 WP 评论来更改了布局。

后端设置

因此,我手动添加了代码,因为它显示了评论,并且可能覆盖了任何 Bricks 生成器不兼容的问题。

Joep

1 个赞

好的。你正在使用的模板构建器可能存在某种加载优先级问题。我明天会试着重现它。请稍等。

我可以把模板生成器发给你参考吗?

在下一个版本(2.4.6)中,get_discourse_comments 实用函数将进行各种更新,该版本目前正在准备发布。更新后的实用方法签名如下所示:

/**
* 获取 Discourse 评论 HTML,以便在不加载评论模板的情况下显示。
*
* @param int $post_id 要显示评论的文章 ID。
* @param bool $perform_sync 加载评论时是否执行评论同步。
* @param bool $force_sync 加载评论时是否绕过评论同步缓存。
* @param string $comment_type 评论显示类型。
*
* @return string
*/
public static function get_discourse_comments( $post_id, $perform_sync = true, $force_sync = false, $comment_type ) {

@Joep_Kannegieter 这将对您的情况(以及其他一些情况)产生一些影响:

  • 评论显示将正常工作
  • 您将通过编程方式控制评论显示类型(即所有评论或评论链接)
  • 您将通过编程方式控制评论缓存

进一步了解:

1 个赞

谢谢!将安装并尝试一下。我会报告结果。

它还没有发布。请等到在您的WordPress管理面板中看到插件的2.4.6版本已准备好更新(我也会在这里通知您)。

您好 Angus,

回来再说这件事;基本上“我让它工作了”,尽管不是使用 Bricks Builder 模板。
当我切换到 twentytwenty 主题时,Discourse 集成显示在博客文章下方,替换了评论字段

使用 Bricks Builder 时,有一个名为“Comments”的元素,它会加载 WP 评论;该插件并未替换它。也无法通过以下方式以编程方式调用:

以编程方式调用时会引发错误:

错误:函数 WPDiscourse\Utilities\Utilities::get_discourse_comments() 的参数太少,在 /home/u43655p432443/domains/domain.nl/public_html/wp-content/themes/bricks/includes/elements/code.php(159) : eval()'d code on line 4 传递了 1 个参数,但需要 4 个参数。

所以这是 Bricks 相关的问题。我也会去问 Bricks 社区。

Joep

目前我只使用 PHP 在模板中调用评论,使用

<?php comments_template(); ?>

这会跳过 Bricks 评论元素而使用核心 WP;这很有效。

Joep

此错误告诉您 get_discourse_comments 实用函数的使用需要更新。以下是如何使用它的示例。

global $post;
use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
$discourse_comments = DiscourseUtilities::get_discourse_comments($post->ID, true, true, 'display-comments');
echo $discourse_comments;