在 wordpress 上向登录的客户显示私人内容

Showing private content to signed in clients on wordpress

我目前正在尝试在我的网站上设置一个客户仪表板,它应该充当所有交换文档(例如发票、设计方案、原型等)的一种存档。我使用以下方法添加了文件ACF 并使用 ACF 中的“用户”字段将其映射到用户,但不是在任何人都可以通过知道 URL 访问的网站上显示它们,我需要一个供登录用户使用的私人网站。

我为 Astra 主题创建了一个子主题,以便编辑 php 文件。然后我创建了自己的文件,并将其作为在 wp admin 中使用以下代码创建页面时使用的模板:

<?php /* Template Name: Kundenbereich */ ?>

然后我用一些 html 和 css 创建了该模板,并使用 php 提取登录用户名等数据,效果很好:

<h1>
Willkommen,
<?php
global $current_user;
wp_get_current_user() ;
echo $current_user->display_name;
?>!
</h1>

然后我的计划是将使用此模板创建的页面添加为插件 UsersWP 中的帐户页面,该插件将其他人锁定,因此只有登录用户才能查看它。 我怀疑这一步破坏了代码,所以我在一个没有添加到 UsersWP 的页面上尝试了它,但所有 ACF php 函数仍然中断。这个想法是 ACF 检查谁登录,然后从在“用户”字段中设置了相应用户的数据集中提取文件。

这是无效的代码:

<?php $current_user_id = get_current_user_id(); ?>
<p>
<?php the_field('kundenname', 'user_' . $current_user_id); ?>
</p>

<?php if( get_field('angebot', 'user_' . $current_user_id) ): ?>
<a href="<?php the_field('angebot', 'user_' . $current_user_id); ?>" >Herunterladen</a>
<? else: ?>
<a href="#" >Nicht verfügbar</a>
<?php endif; ?>

我尝试过的用户 ID 为 1,但即使将代码更改为 <?php the_field('kundenname', 'user_1'); ?> 什么也没做,我也不知道为什么。

当我使用永久链接并且不尝试检查用户 ID 时,上述所有方法都有效。但这根本不是私人的,因此它对我不起作用。

有解决办法吗?还是只使用一个插件的更优雅的解决方案?

我意识到我的错误,我使用 CPT UI 专门为 ACF 字段创建了一个菜单,但我需要做的只是将这些字段添加到管理员的 Wordpress 用户设置中。

我上面的代码就是这样工作的,所以如果有人需要客户端仪表板,请随时使用它。

这是一个快速屏幕共享:https://www.loom.com/share/aab482dc0a05412b98d1529ee0ddcba5