====== 한테마 2014 두산 이슈 처리 ====== ===== KK I Like It 플러그인 분석 ===== ==== 플러그인 동작 설명 ==== [[https://wordpress.org/plugins/kk-i-like-it/ |KK I Like It]] 플러그인은 특정 포스트나 페이지에 유저의 선호도를 측정할 수 있는 플러그인입니다. [[http://facebook.com | 페이스북]]의 "좋아요 (Like)"와 유사합니다. ==== 데이터 저장 영역 ====== 플러그인을 설치하면 두 개의 테이블이 생성됩니다. * wp_kklike * wp_kklikeuser 이 두 테이블 중 wp_kklikeuser 테이블에만 데이터가 기록되며, wp_kklike는 별도의 용도로 사용되는 것으로 보입니다. === wp_kklikeuser 테이블 === * id: PK입니다. * idwpuser: wp_users.ID 입니다. * idlike: "좋아요" 표시를 한 wp_posts.ID입니다. * ip: 사용자 IPv4 * date: 기록 일시 === wp_postmeta === * meta_key kklike_value: 각 포스트별 "좋아요" 누적도수. ==== 데이터 읽기 인터페이스 ==== WP Loop 안에서 "좋아요" 수를 읽기 위해서는 kkLikeRating() 함수를 사용하면 되고, 포스트 내부에서는 쇼트코드를 사용해도 됩니다. 자세한 사항은 플러그인의 문서를 참조하면 됩니다. 위에 언급된 플러그인에서 정의된 함수도 결국은 wp_*meta 테이블의 meta_key를 이용하게 되므로 별도로 [[http://codex.wordpress.org/Function_Reference/get_post_meta | get_postmeta()]] 함수 등을 사용해도 됩니다. ==== 데이터 쓰기 인터페이스 ==== admin-ajax.php 로 다음과 같은 파라미터를 보내는 것으로 처리됩니다 * action: ''add_like'', ''remove_like'' 둘 중 하나를 선택합니다. * idPost: 해당 포스트 아이디입니다. * type: "post"로 고정되어 잇습니다. ===== wp favorite post 플러그인 분석 ===== ==== 플러그인 동작 설명 ==== [[https://wordpress.org/plugins/wp-favorite-posts/|WP Favorite Posts]] 플러그인은 특정 포스트, 페이지에 별도의 북마크를 기록할 수 있습니다. 웹브라우저의 일반적인 북마킹이 아닌, 워드프레스 사용자들이 내부의 포스트만 소위 '스크랩'하기 위한 플러그인입니다. ==== 데이터 저장 영역 ==== 이 플러그인은 별도의 데이터베이스 테이블을 생성하지 않습니다. === wp_usermeta === meta_key "wpfp_favorites"에 각 사용자의 모든 북마크를 serialized 된 상태로 저장합니다. === wp_postmeta === meta_key "wpfp_favorites"에 각 포스트가 모두 몇 번 북마크 되어 있는지 정수로 저장합니다. 누적 회수는 아니며 누군가 어떤 post를 favorite에서 삭제하면 그만큼 감소하게 됩니다. 비회원을 위해서도 북마크를 할 수 있도록 제공합니다만, 이 때는 사용자의 브라우저 쿠키에 저장하므로 일관성이 떨어집니다. ==== 데이터 읽기 인터페이스 ==== 해당 포스트가 유저에 의해 북마크 되었는지 판별하기 위해서는 meta key wpfp_favorites를 가져와 처리하면 됩니다. ==== 데이터 쓰기 인터페이스 ==== 아래와 같이 워드프레스 루트 URL로 포스트 ID와 액션을 파라미터로 넘겨주면 됩니다. * 추가: ''/?wpfpaction=add&postid='' * 삭제: ''/?wpfpaction=remove&postid='' ===== What's up? 뷰에서 글 쓰기 인터페이스 ===== What's up 메뉴는 [[https://wordpress.org/plugins/dw-question-answer/|DW Question Answer]] 플러그인 기반으로 만들어져 있습니다. 그러므로 해당 플러그인의 동작 방식을 파악할 필요가 있습니다. ==== 동작 방식 ==== DW Question Answer (이하 dwqa)는 별도의 테이블을 생성하지는 않지만, 질문과 답변 글 관리를 위해 custom post를 정의합니다. * dwqa-question: 질문 포스트입니다. * dwqa-answer: 답변 포스트입니다. 질문과 답변의 상하관계를 위해 dwqa-answer 타입 포스트는 메타 키 "_question"를 가집니다. 이 키의 값은 dqwa-question 포스트의 ID입니다. ==== 포스트 작성 ==== 답글, 혹은 질문 작성을 위해서는 [[http://codex.wordpress.org/Function_Reference/wp_insert_post | wp_insert_post()]] 함수를 사용하면 됩니다. 함수의 첫번째 인자로 $post array를 요구하는데, 상당히 많은 항목을 필요로 합니다. 그러나 많은 부분은 기본값으로 두어도 무방합니다 ^항목 ^설명 ^ | ID | 항상 새로운 항목을 작성하게 되므로 이 키의 값은 쓰지 않거나, 아예 설정하지 않습니다. | | post_content | 포스트 내용입니다. | | post_name | 포스트 슬러그. [[http://codex.wordpress.org/Function_Reference/sanitize_title | sanitize_title()]]를 이용해 생성합니다. | | post_title | 사용자가 폼에서 입력한 포스트 제목입니다. | | post_status | 이 경우 바로 'publish' 되어야 하므로 값은 항상 'publish'로 맞춥니다. | | post_type | 질문의 경우 dwqa-question, 답변의 경우 dwqa-answer | | post_author | 기본값은 현재 사용자의 ID이므로, 이 경우라면 별도로 설정하지 않아도 됩니다. | | ping_status | 기본값으로 으로 둡니다. | | post_parent | 기본값인 0으로 둡니다. | | menu_order | 기본값인 0으로 둡니다. | | to_ping | 기본값으로 둡니다. | | pinged | 기본값으로으로 둡니다. | | post_password | 기본값인 공백으로 둡니다. | | guid | 이 키는 아예 넣지 않아도 됩니다. | | post_content_filtered | 이 키는 아예 넣지 않아도 됩니다. | | post_excerpt | 이 키는 아예 넣지 않아도 됩니다. | | post_date | 넣지 않아도 됩니다. | | post_date_gmt | 넣지 않아도 됩니다. | | comment_status | 넣지 않아도 됩니다. | | post_category | 포스트의 카테고리를 지정합니다. array(, ...) 기본은 empty | | tags_input | 포스트의 태그를 지정합니다. | | tax_input | array( => ) // For custom taxonomies. Default empty. | | page_template | 페이지 경우에 템플릿을 지정하기 위한 메뉴이며, 일반 포스트에서는 사용하지 않습니다. | 함수 호출 후 생성된 포스트의 ID를 리턴하므로 답변의 경우 이 아이디를 이용해 _question 메타 키의 값을 별도로 채우면 됩니다.