новая запись в блоге в ленте активности всего сайта, но не в ленте личной активности

Сообщение в блоге (wp-post) не появлялось в потоке активности из коробки при моей установке buddypress. Поэтому я добавил фрагмент кода в bp-acitivity-actions.php: function buddypress_edit_blog_post($post_id) { global $bp, $user_id; $post = get_post($post_id); $title = $post->post_title; $user_fullname = bp_core_get_user_displayname($user_id);

 bp_activity_add(array(
'action' => $user_fullname.' updated ' . $title . ':',
'component' => 'blog_post',
'type' => 'update_post',
'primary_link' => get_permalink($post_id),
'user_id' => $user_id,
'content' => $post->post_content
 ));
}
add_action('edit_post', 'buddypress_edit_blog_post');

и теперь активность на сайте отображает новую запись в блоге пользователя, однако я все еще не вижу ее в личной ленте активности. Я не понимаю, почему это происходит? И я хочу знать, какой фрагмент кода управляет личным потоком активности, я хотел бы знать, как это работает.

И после того, как я заменил глобальную переменную $user_id на локальную переменную $user_id, которая возвращается функцией wp_get_current_user(), ничего не изменилось. Вот новая версия моего кода:

function buddypress_edit_blog_post($post_id) {
 global $bp; //, $user_id;
 $user_id = wp_get_current_user();
 $post = get_post($post_id); 
 $title = $post->post_title;
 $user_fullname  = bp_core_get_user_displayname($user_id);

 bp_activity_add(array(
'action' => $user_fullname.' updated ' . $title . ':',
'component' => 'blog_post',
'type' => 'update_post',
'primary_link' => get_permalink($post_id),
'user_id' => $user_id,
'content' => $post->post_content
 ));

}
add_action('edit_post', 'buddypress_edit_blog_post');

Спасибо.


person ter    schedule 23.10.2015    source источник


Ответы (2)


Переменная $user_id внутри вашей функции bp_activity_add() должна быть установлена ​​на идентификатор пользователя, чтобы элемент активности отображался в личном потоке этого пользователя. Убедитесь, что значение установлено правильно.

Теперь получение идентификатора пользователя немного отличается в зависимости от конкретного пользователя, который вам нужен. Например:

  • bp_loggedin_user_id() даст вам идентификатор пользователя, вошедшего в систему в данный момент
  • bp_displayed_user_id() возвращает идентификатор отображаемого в данный момент пользователя

Вы должны использовать функцию, соответствующую вашему варианту использования.

person henrywright    schedule 02.11.2015

wp_get_current_user() возвращает объект, а не одну переменную. https://codex.wordpress.org/Function_Reference/wp_get_current_user

Или вы можете использовать bp_loggedin_user_id(), как говорит Генрирайт.

Поэтому я добавил кусок кода в bp-acitivity-actions.php.

Вы не должны изменять файлы ядра. Ваша функция может находиться в вашей теме/functions.php.

person shanebp    schedule 03.11.2015