Buddypress — Создание «Огороженного Сада» Комментариев

  • Автор темы Jenillite58
  • Обновлено
  • 22, Oct 2024
  • #1

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

 function filter_the_comments( $array ) { 

$comment_IDs = array();

foreach ( $array as $key => $val ) {

array_push($comment_IDs, $val->comment_ID);

}    

foreach ( $array as $key => $val ) {

if ( !in_array( $val->comment_parent, $comment_IDs ) && $val->comment_parent != 0 )

unset( $array[ $key ] );

}    

return $array; 
}; 

add_filter( 'the_comments', 'filter_the_comments', 10, 1 ); 
 
, querying for the user_id членов класса.

Однако преподаватели могут быть членами более чем одного класса, поэтому мне нужно было также отфильтровать их ответы на комментарии учеников, которые не входят в класс вошедшего в систему ученика.

Я придумал следующее решение:

pre_get_comments

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

Спасибо.

#комментарии #buddypress

Jenillite58


Рег
03 Jan, 2012

Тем
70

Постов
196

Баллов
576
  • 25, Oct 2024
  • #2

Некоторые предложения, добавленные в виде комментариев:

 function filter_the_comments( $array ) { 

$comment_IDs = array();

foreach ( $array as $key => $val ) {

//assuming the comments are sorted by date in ascending order, a parent has to come before the child comment, so there is no need to wait till all subsequent IDs have been added in order to check for this comment's parent

//the && operator stops executing as soon as a condition fails, so it's more efficient to check if there is a parent first

//0 evaluates to false and other values to true, so the comparison can be skipped

if ($val->comment_parent && !in_array( $val->comment_parent, $comment_IDs )) unset( $array[ $key ] );

//there is no need to add this comment's ID if you have removed it, so put this in the else statement

else array_push($comment_IDs, $val->comment_ID);

}    

return $array; 
};
 
 

Swd1


Рег
25 Jul, 2006

Тем
76

Постов
171

Баллов
561
Похожие темы Дата
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно