Discourse WP 플러그인이 Easy Digital Downloads WP 플러그인에서 PayPal 설치를 차단합니다

Discourse WP 플러그인이 Easy Digital Downloads WP 플러그인(EDD)의 새 버전에서 PayPal API/웹훅 연결 설치 문제를 일으키는 것으로 확인되었습니다.

즉, Discourse WP 플러그인이 활성화된 상태에서는 EDD의 PayPal API/웹훅이 연결되지 않지만, Discourse를 비활성화하면 EDD의 PayPal API/웹훅이 정상적으로 연결됩니다. 다만, Discourse를 다시 활성화하면 EDD의 PayPal API/웹훅 연결이 다시 해제됩니다.

모든 플러그인은 최신 버전으로 업데이트되어 있습니다.

참고용 EDD 플러그인 정보:
https://docs.easydigitaldownloads.com/article/2410-paypal Easy Digital Downloads – eCommerce Payments and Subscriptions made easy – WordPress plugin | WordPress.org

도움을 주시면 감사하겠습니다!

리포트 감사합니다. 이번 주 안에 호환성을 테스트해서 문제가 어디서 발생하는지 알려드리겠습니다.

Angus, 정확해요! 궁금한 점이 있으면 알려주세요!

@angus님, 죄송하지만 혹시 이 이슈를 검토해 보셨는지 확인하려고 연락드렸습니다.

문제를 재현하는 데 성공했습니다. 원인을 파악하는 데는 시간이 좀 더 걸릴 것 같습니다. EDD에는 내부 로깅 시스템이 있지만, 해당 작업에 대해서는 아무것도 기록하지 않고 있습니다. 다음 주에도 이 문제를 계속 다루겠습니다. 마침 WP Discourse의 자체 웹훅 관리 기능을 위한 로그 작성 작업을 진행 중이라 이 작업과 자연스럽게 이어지긴 하지만, 과정이 쉽지 않아 해결까지 몇 주 더 소요될 수 있습니다.

두 플러그인이 웹훅을 사용하는 방식이 어떤 식으로든 충돌하고 있습니다. 이 두 플러그인 간 충돌의 원인이 어느 한쪽 플러그인에서 비롯되었을 수도 있다는 점을 유념해 주세요. 실제로, 실패하는 작업이 EDD 내에서 발생하고 있으므로, 논리적으로 디버깅해야 할 곳은 해당 플러그인의 개발자가 속한 EDD 플러그인 자체입니다. 아직 연락하지 않았다면 그들에게도 문의해 보시기 바랍니다.

안녕하세요 @angus. EDD에서 아래와 같은 소식을 전했습니다:


WP Discourse 플러그인에서 문제를 확인했습니다. 개발자에게 이 내용을 전달해 주실 수 있으실까요?

문제는 이 파일에서 발생하고 있습니다:

lib/discourse-comment.php

구체적으로는 이 필터입니다:

add_filter( ‘wp_kses_allowed_html’, array( $this, ‘extend_allowed_html’ ), 10, 2 );

기본적으로 필터링되는 배열에는 다음 항목이 포함되어 있습니다:

array (
‘align’ => true,
‘dir’ => true,
‘lang’ => true,
‘xml:lang’ => true,
‘aria-describedby’ => true,
‘aria-details’ => true,
‘aria-label’ => true,
‘aria-labelledby’ => true,
‘aria-hidden’ => true,
‘class’ => true,
‘id’ => true,
‘style’ => true,
‘title’ => true,
‘role’ => true,
‘data-*’ => true,
)

특히 주목할 점은 마지막 항목인 'data-*'입니다.

WP Discourse 플러그인은 data-youtube-id 속성을 추가하기 위해 이 값을 필터링하고 있지만, 그렇게 함으로써 의도치 않게 data-* 속성이 해제되고 있습니다. 이로 인해 wp_kses_post() 하에서 다른 모든 data 속성이 더 이상 작동하지 않습니다. 이것이 우리의 PayPal 코드에 문제를 일으키고 있습니다.

정확히 말씀드리자면: WP Discourse가 실제로 PayPal 연결을 끊는 것은 아닙니다. 단순히 연결 상태 여부를 확인하는 코드를 깨뜨리는 것입니다. 이는 마크업에서 data 속성을 사용하는데, WP Discourse의 필터가 이를 제거하기 때문입니다.

개발자에게 드리는 제 제안은 $allowedposttags[‘div’] 배열을 덮어쓰는 대신 확장하는 것입니다.

다음과 같이 하는 대신:
$allowedposttags[‘div’] = array(
‘class’ => true,
‘id’ => true,
‘style’ => true,
‘title’ => true,
‘role’ => true,
‘data-youtube-id’ => array(),
);

다음과 같이 처리할 수 있습니다:

$allowedposttags[‘div’][‘data-youtube-id’] = array();

이렇게 하면 문제가 해결되며, 기존 기능이 동일하게 유지되도록 보장할 수 있습니다.

훌륭합니다. 그 일을 진행해 주셔서 감사합니다. 이번 주 안에 수정 사항을 준비하겠습니다. 다만 병합은 다음 주에 이루어질 수도 있습니다.

네, 어거스! 이 문제에 대해 관심을 가져주셔서 감사합니다. 계속 소식 알려주세요.

이 PR은 근본적인 문제를 해결합니다. 향후 1주 이내에 병합될 예정입니다.

위대한 Angus님! 확인차 연락드립니다. 일주일쯤 후에 머지될 거라고 말씀하셨는데, 진행 상황은 어떤가요?

PR을 병합할 권한은 없지만, Simon이 가능할 때 처리할 것입니다. 병합이 완료되면 해당 이슈가 해결됩니다.

Angus, 감사합니다.

@simon 이 PR이 언제 병합될지 아시나요?

늦어서 죄송합니다. 오늘 안에 머지를 완료할 수 있을 것 같습니다. 완료되면 여기서 알려드리겠습니다.

@JMJ PR이 이제 병합되었고 WP Discourse 2.3.4가 wordpress.org에 배포되었습니다. WP Discourse 2.3.4에서 EDD가 프로덕션 환경에서 의도대로 작동하는지 확인했습니다.