Home 게시판 커뮤니티 Q&A 새 포스트 등록시에 , 기본 카테고리를 등록하려 합니다.

4개 답변, 4 voices Last updated by Avatar of remotedremoted 8 years, 2 months 전
  • Avatar of remotedremoted
    Participant
    @remoted
    #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 로 연결한 상태입니다.

    문제2

    네.. 이제 정말 질문 들어갈께요.. 서론이 길었습니다..

    위에 New-posts 에서 등록버튼을 누르면, 유저의 데이터를 가져와서

    유저가 기획자 ( wp_user_cat == 1) 이라면,  기획자 등록 및 찾기 페이지에서 등록버튼 링크와 동시에, Artists Add New Post 의 Artists Category 에, 기획자가 체크되도록 하고싶습니다..

    문제1

     

    이걸 공개하기 누르는 순간, set_post.. 등등으로 해보려했는데, 일단 파일구조를 탐험해야하는데, 거의 8시간동안 탐험했지만 어디인지 모르겠습니다 ㅠㅠ..

    어떤 파일을 건드려야, 해당 문제를 해결할 수 있을까요? 아 그리고 추가적으로 자동체크됨과 동시에, 해당 체크옵션(예를들면 기획자면 기획자) 만 disable 혹은 none 되도록 설정하고 싶습니다.

    (참고로 영어도 다 읽을수 있으니, 참고링크도 마구 넣어주셔도 됩니다.)

    홈페이지 링크는 http://harmonykorea.net 입니다!

     

     

     

    Avatar of Donghyeok KangDonghyeok Kang
    Participant
    @wolfkang
    #30085

    워드프레스는 수정해서 쓰는 게 아니라, 확장해서 쓰는 겁니다. ㅜ.ㅜ

    그럼 확장은 어떻게 하느냐… filter 와 action 으로 합니다.

    워드프레스 코어를 수정하면 차후 업데이트를 할 수 없기 때문에 보안 등 문제가 발생할 수 있습니다.

    Avatar of Donghyeok Kang
    단비랩스 CTO
    Avatar of Matthew ParkMatthew Park
    Moderator
    @hackya
    #30089

    @ Donghyeok Kang 님,

    여기에 추천버튼이 없는 관계로…. ㅎㅎㅎㅎ

    3021307-inline-fb-likebutton-printpackaging

    Avatar of 랭커랭커
    Participant
    @ranker
    #30133

    아래처럼 하면 되지 않을까요? ㅎㅎ

    function change_default_category( $post_id ) {

    if( 특정 유저/권한이 있으면) {

    ?>
    <script>
    // 우측 카테고리 메타 박스의 체크박스를 선택(checked)
    </script>
    <?php

    }
    }
    add_action( ‘save_post’, ‘change_default_category’);

    코드 뷰어? 하일라이팅? 깨져서 나오는데… 어떻게 좀 안될까요?

    운영자님!!! 사랑(love)인뎅?? ^^;;;

    Avatar of remotedremoted
    Participant
    @remoted
    #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 에 들어간것만으로도 임시생성한것으로 체크가 되기때문에, 체크기능이 활성화됨
    ?>

5 글 보임 - 1에서 5 까지 (총 5 중에서)
  • 답변은 로그인 후 가능합니다.