GET_POST_META/更新_POST_META数组

时间:2019-08-03 作者:Arg Geo

我正在尝试将当前用户的ID(如果用户已登录)保存在一个数组中,在用户阅读的每一篇文章中都使用一个名为“post\\u is\\u read”的post\\u元键,以便我可以执行某些操作,例如将文章标记为“未读”。

我将此添加到single page 模板:

$readers = get_post_meta(get_the_ID(), \'post_is_read\');
$current_user = wp_get_current_user();
if (!in_array($current_user->ID, $readers)) {
   $readers[] = $current_user->ID;
    update_post_meta( get_the_ID(), \'post_is_read\', $readers, false);
}
在posts循环中,我添加了以下代码:

$readMeta = get_post_meta( get_the_ID(), \'post_is_read\', true );
$current_user = wp_get_current_user();
if ( $readMeta != $current_user->ID ) {
   echo \'unread post\';
}
我尝试了第一段代码的许多变体,修改了add\\u post\\u meta、update\\u post\\u meta等。我发现的一个问题是,当打印存储在元键“post\\u is\\u read”中的数组时,输出只是“array”。如果这不是代码中的唯一问题,我认为这是一个主要问题。

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

你在打电话get_post_meta() 以两种不同的方式:第一,离开$single 取消设置(默认为false) 将获得给定键的完整元条目数组;第二,设置$singletrue, 将仅使用该键获取第一个项目。

我相信,您想要的是在post_is_read 元。

下面是我如何解决这个问题的:

single page template

// Get the list of readers.
$readers = get_post_meta( get_the_ID(), \'post_is_read\', true );
// If the value is empty, make sure it\'s an array.
if ( empty( $readers ) ) {
    $readers = array();
}
$current_user = wp_get_current_user();
if ( ! in_array( $current_user->ID, $readers ) ) {
   // Adds the current user ID to the $readers array.
   $readers[] = $current_user->ID;
   // Updates the \'post_is_read\' meta.
   update_post_meta( get_the_ID(), \'post_is_read\', $readers );
}

posts loop

$readers = get_post_meta( get_the_ID(), \'post_is_read\', true );
if ( empty( $readers ) ) {
    $readers = array();
}
$current_user = wp_get_current_user();
if ( ! in_array( $current_user->ID, $readers ) ) {
   // If the current user hasn\'t read the post, make a note of it.
   echo \'unread post\';
}

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在