-
2016/02/13 2:38 오전 #30070
워드프레스 입문한지 7일된 학생입니다 ㅠㅠ..
여차저차 wordpress.org 를 통해서 내장함수도 뜯어고치고, 여러 고비를 넘겨왔는데, 한가지가 어디를 고쳐야할지 궁금하여 질문드립니다.
현재 상태를 설명드리자면..
회원가입 을 할때에, 유저의 직업을 고릅니다 ( 기획사, 편곡자, 작곡자, 등등) 을 고르고 이메일 컨펌을하면, wp_create_user(), wp_insert_user() 나, wp_login.php 파일을 수정했기 때문에, 해당 기능에는 문제가 없습니다..
특히 숟가락으로 파내려가서, 테마 내부의 page.php 파일에서, 페이지 아이디값과 유저의 직업 카테고리를 비교하여 등록버튼을 나오게도 하고, 없애기도 했습니다..
이제 본론적으로 문제를 말씀드리자면,
이 등록버튼을 제가 a href 태그를 이용해서 new-posts 쪽으로 링크를 만들었습니다. 아 물론, 가입되는 기본 유저들은 “Author” 권한을 주었기 때문에, new-post 에는 문제가 없더군요… (이런 기능이 있는지도 모르고 거의 6시간을 워드프레스 내부구조 탐험을 했습니다..)
일단 현재의 상태는
wp_user 테이블을 수정해서 wp_user_cat 이라는 Field 를 int(2) 형으로 추가했고,
wp_usercat 이라는 테이블을 만들어서 PK 및 이름을 주고, Foreign Key 로 연결한 상태입니다.
네.. 이제 정말 질문 들어갈께요.. 서론이 길었습니다..
위에 New-posts 에서 등록버튼을 누르면, 유저의 데이터를 가져와서
유저가 기획자 ( wp_user_cat == 1) 이라면, 기획자 등록 및 찾기 페이지에서 등록버튼 링크와 동시에, Artists Add New Post 의 Artists Category 에, 기획자가 체크되도록 하고싶습니다..
이걸 공개하기 누르는 순간, set_post.. 등등으로 해보려했는데, 일단 파일구조를 탐험해야하는데, 거의 8시간동안 탐험했지만 어디인지 모르겠습니다 ㅠㅠ..
어떤 파일을 건드려야, 해당 문제를 해결할 수 있을까요? 아 그리고 추가적으로 자동체크됨과 동시에, 해당 체크옵션(예를들면 기획자면 기획자) 만 disable 혹은 none 되도록 설정하고 싶습니다.
(참고로 영어도 다 읽을수 있으니, 참고링크도 마구 넣어주셔도 됩니다.)
홈페이지 링크는 http://harmonykorea.net 입니다!
2016/02/16 2:02 오후 #30085워드프레스는 수정해서 쓰는 게 아니라, 확장해서 쓰는 겁니다. ㅜ.ㅜ
그럼 확장은 어떻게 하느냐… filter 와 action 으로 합니다.
워드프레스 코어를 수정하면 차후 업데이트를 할 수 없기 때문에 보안 등 문제가 발생할 수 있습니다.
2016/02/22 7:47 오후 #30133아래처럼 하면 되지 않을까요? ㅎㅎ
function change_default_category( $post_id ) {
if( 특정 유저/권한이 있으면) {
?>
<script>
// 우측 카테고리 메타 박스의 체크박스를 선택(checked)
</script>
<?php}
}
add_action( ‘save_post’, ‘change_default_category’);코드 뷰어? 하일라이팅? 깨져서 나오는데… 어떻게 좀 안될까요?
운영자님!!! 사랑(love)인뎅?? ^^;;;
2016/02/23 7:13 오전 #30144아 맞습니다 ㅎㅎ… 사실 랭커님 말씀대로 후크를 통해서 접근하는 방법이 맞고, 이미 수일전에 해결했습니다만… 해결했다고 답변을 못올렸군요…
다음과 같이 코드를 짰습니다.
<?php
/*Plugin Name: new-post-hooker
Plugin URI: http://harmonykorea.net
Description: When added new post, this function hook the post and add cat
Version: 0.5
Author: TaeHui Lee
Author URI: http://35mwlee.blog.me/
License: public domain
*/
/*
function detect_shortcode( $atts, $content = null ) {
return '[MobDetective !isMobile output="" ]' . $content . '[/MobDetective]';
}
add_shortcode( 'detect', 'detect_shortcode' );
*/
function except_music_company($post_id){$post = get_post($post_id);
$user_ID = $post->post_author;$userdata = get_userdata($user_ID);
$post_type = $post->post_type;
$music_cat = stripslashes($_GET['cat']);
if ($post_type == 'artists'){
if($music_cat != 'a-music-company' && $userdata->wp_user_cat != 1)
{
$user_cat = 'a-music-company';
wp_remove_object_terms( $post_id, $user_cat, 'artist_cat');
} // GET 으로 받아와서 허술해 보이지만, 전혀 허술하지 않은 함정 발동
}
}
add_action('save_post', 'except_music_company',11,1);
//publish_post 는, save_post 와 똑같아 보이지만 엄연히말하면 transition 상태에 의하여 publish 되었을때만 가동됨.. 즉 글이 쓰여진 후에 가동되는줄 알았는데 그게 아닌듯..
// save_post가 원하는걸 다 해결해줌function categoryhooking($post_id){
global $wpdb;
$post = get_post($post_id);
$user_ID = $post->post_author;$userdata = get_userdata($user_ID);
$post_type = $post->post_type;$user_cat = '';
$music_cat = stripslashes($_GET['cat']);
//해당 포스트가, 쓰여지고나서 수정되지 않았는지 확인함. (즉 한번만 쓰여진 글인지 확인)
if($post->post_date == $post->post_modified){
if ($post_type == 'artists'){if($userdata->wp_user_cat == 2){ //리턴받은 cat 에 대한 검증절차.. cat 이 music-company 가 아닌 강제접근일 경우에는, 유저의 직업대로 체크가 이루어짐
$user_cat = 'a-composer';
}
else if($userdata->wp_user_cat == 3){
$user_cat = 'a-singer';
}
else if($userdata->wp_user_cat == 4){
$user_cat = 'a-lyricist';
}
else if($userdata->wp_user_cat == 5){
$user_cat = 'a-arranger';
}
else if($userdata->wp_user_cat == 6){
$user_cat = 'a-music-director';
}
else if($userdata->wp_user_cat == 7){
$user_cat = 'a-musician';
}
else if($userdata->wp_user_cat == 8){
$user_cat = 'a-indie';
}
wp_set_object_terms($post_id, $user_cat,'artist_cat', true);if($music_cat == 'a-music-company'){ //DB정보 노출방지 --> 페이팔 결제후에 href 에서 cat을 함께 인자로 넘겨옴.
$user_cat = 'a-music-company';
$wpdb->update(
'wp_users',
array(
'wp_user_cat' => '1', // Integer
),
array( 'ID' => $user_ID ),
array(
'%d' // value1
),
array( '%d' )
);
wp_set_object_terms($post_id, $user_cat,'artist_cat', true);
/*만약 기무를 통해서 cat 값을 a-music-company 를 리턴하며 돌아올 경우, 자동으로 기획자에 체킹 및 user_cat (주직업) 을 기획사로 변경, 그래도 부직업을 위해 체크를 먼저타게해서
기획사와 부직업을 동시에 가질 수 있도록 유도함.*/
}
}
else if ($post_type == 'albums'){
if($userdata->wp_user_cat == 1){
$user_cat = 'g-music-company';
}
else if($userdata->wp_user_cat == 2){
$user_cat = 'g-composer';
}
else if($userdata->wp_user_cat == 3){
$user_cat = 'g-singer';
}
else if($userdata->wp_user_cat == 4){
$user_cat = 'g-lyricist';
}
else if($userdata->wp_user_cat == 5){
$user_cat = 'g-arranger';
}
else if($userdata->wp_user_cat == 6){
$user_cat = 'g-music-director';
}
else if($userdata->wp_user_cat == 7){
$user_cat = 'g-musician';
}
else if($userdata->wp_user_cat == 8){
$user_cat = 'g-indie';
}wp_set_object_terms($post_id, $user_cat,'genres', true);
}
}
// Place here your code
}
add_action('save_post', 'categoryhooking',10,1);
//save_post 는 엄연히 말하면, 글이 생성되거나 바뀔때 후킹을 하게 되지만, new-post 에 들어간것만으로도 임시생성한것으로 체크가 되기때문에, 체크기능이 활성화됨
?> -
AuthorPosts
- 답변은 로그인 후 가능합니다.