정기결제에 결제정보에 칼럼하나 추가 하고 싶은데요..

제가 정기결제 페이지에서 결제정보에 등록하는 곳에 

가격(필수)를 할인가격으로 표현하고 정상가격 칼럼을 하나 추가 싶습니다.

현재 보여지는 화면에선

결제방식
가격
첫 결제가격

이렇게 나오는 부분에 

결제방식
정상가격
할인가격
첫 결제가격
 

이렇게 하고 싶고 상품 리스트에도 해당 정상가격이 표현되어지게 하려고 합니다.
그리고 결제페이지에도 정상가격과 할인가격을 나타나게 하려고 하는데 

데이터 테이블이 어디에 추가해야 하는지 몰라서요...
혹시 필드추가로 표현이 가능한가요?

제가 표현방법이 잘못 전달될 수 있어서요.^^
아니면 정기결제에 결제정보에 입력필드를 더 추가할 수 있는지요? 해당 필드추가를 간단하게 결제필드처럼 할 수 있는지요?

아니면 어느 테이블에 추가하면 되는지 알려주시면 제가 만들어 보려고요..^^
그럼 답변 부탁드립니다.

좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
워드프레스 에러 기술지원 서비스 전문가에게 맡기세요
  • 안녕하세요.

    테마 쪽 functions.php 파일에 코드를 추가해서 필드를 추가하는 건 어려울 듯합니다.

    product_save 메소드 쪽 코드는 아래의 코드처럼 적용해주셔야 합니다.

    $product_price1 = isset($_POST['product_price1']) ? sanitize_text_field($_POST['product_price1']) : '';

     

    또한 product_save 메소드에서 받아온 값을 실제 저장할 수 있는 메소드를

    Cosmosfarm_Members_Subscription_Product 클래스에 추가하신 후 활용해주셔야 합니다.

     

    프로그래밍 지식이 없으시다면 커스텀이 어려울 듯합니다.

    고맙습니다.

  • 자꾸 귀찮게 해드려 죄송합니다.

    말씀하신 Cosmosfarm_Members_Controller.class.php 파일의 product_save 메소드에 이미 코드를 넣었는데

        public function product_save(){
            if(current_user_can('manage_options') && isset($_POST['cosmosfarm-members-product-save-nonce']) && wp_verify_nonce($_POST['cosmosfarm-members-product-save-nonce'], 'cosmosfarm-members-product-save')){
                
                $_POST = stripslashes_deep($_POST);

                $product_id = isset($_POST['product_id']) ? intval($_POST['product_id']) : '';
                $product_title = isset($_POST['product_title']) ? sanitize_text_field($_POST['product_title']) : '';
                $product_price1 = isset($_POST['product_price1']) ? 

    cosmosfarm-subscription-product-setting-1  페이지에서 입력값을 넣거나 저장하면 다음페이지로 넘어갈때 에러가 납니다.

    https://ssamacademy.com/wp-admin/admin-post.php =======>여기서 에러가 납니다.
     

    아무래도 입력값 저장이 안되어 그런거 같은데 제가 볼땐 한두군데만 처리하면 될 거 같은데 도무지 모르겠어요..

    이게 안되면 혹시 다른 방법으로 표현 할 수는 없나요? function.php 에서 처리 할 수 있는 방법은 없는지요?
     

  • 플러그인 커스텀을 하시려면 프로그래밍에 대한 지식이 어느 정도 있으셔야 합니다.

    Cosmosfarm_Members_Controller.class.php 파일의 product_save 메소드에

    필드 값을 저장하는 코드를 추가해주셔야 합니다.

     

    Cosmosfarm_Members_Subscription_Product.class.php 파일에서는 update_post_meta 함수를 활용하고 있습니다.

    update_post_meta 함수에 대한 자세한 내용은

    아래 링크를 참고 부탁드립니다.

    https://developer.wordpress.org/reference/functions/update_post_meta/

    고맙습니다.

  • 제가 말씀하신 소스에 아래 코드를 새로 추가했습니다. 근데 결제정보에서 해당 값을 저장하면 에러가 나네요. 제가 잘못 넣었는지 아니며 빠진 곳이 있는지 도움 부탁드립니다.
    일반적으로 정상가격, 할인가격을 표현하려고 하다보니 간단한 부분이겠지만 제가 프로그램쪽은 그냥 복사해서 붙이는 정도 수준이라서요.ㅠㅠ
    다른건 어제 제가 적은 코드대로 price1으로 해서 넣었습니다.

    /wp-content/plugins/cosmosfarm-members/class/Cosmosfarm_Members_Subscription_Order.class.php

    ====================================
    public function ID(){
    return intval($this->post_id);
    }
    public function title(){
    return $this->post_title;
    }
    public function price1(){
    return $this->post_price1;
    }

    public function content(){
    return $this->post_content;
    }
    ==============================
    public function create($user_id, $args){
    $user_id = intval($user_id);
    $title = isset($args['title']) ? $args['title'] : '';
    $price1 = isset($args['price1']) ? $args['price1'] : '';

    $this->post_id = wp_insert_post(array(
    'post_title'     => wp_strip_all_tags($title),
    'post_price1'     =>$price1,
    'post_content'   => $content,

    ==========================================
    public function update($args){
    if($this->post_id){
    $args['ID'] = $this->post_id;
    if(isset($args['title'])){
    $args['post_title'] = $args['title'];
    }
    if(isset($args['price1'])){
    $args['post_price1'] = $args['price1'];
    ===============================================


    "/wp-content/plugins/cosmosfarm-members/class/Cosmosfarm_Members_Controller.class.php"

    $product = new Cosmosfarm_Members_Subscription_Product($product_id);
    if(!$product->ID()){
    $product->create(get_current_user_id(), array('title'=>$product_title, 'price1'=>$product_price1, 'content'=>$product_content, 'excerpt'=>$product_excerpt, 'name'=>$product_name));
    }
    else{
    $product->update(array('title'=>$product_title, 'price1'=>$product_price1, 'content'=>$product_content, 'excerpt'=>$product_excerpt, 'name'=>$product_name));
    }

  • 안녕하세요.

    코스모스팜 회원관리 플러그인 관련해서는 워드프레스 카테고리에 올려주시길 부탁드립니다.

    코스모스팜 회원관리 플러그인의 정기결제 상품은

    워드프레스 커스텀 포트스 카테고리에 올려주시길 부탁드립니다.

     

    코스모스팜 회원관리 플러그인의 정기결제 상품은

     

    워드프레스 커스텀 포스트 타입을 활용하고 있습니다.

    정기결제 상품은 post_type을 cosmosfarm_product로 등록하고 있습니다.

    정기결제 상품 관련된 파일은

    FTP로 접속해서 /wp-content/plugins/cosmosfarm-members/class/Cosmosfarm_Members_Subscription_Product.class.php 파일입니다.

     

    Cosmosfarm_Members_Subscription_Product 클래스는 Cosmosfarm_Members_Subscription_Order 클래스를 상속받아서 활용하고 있습니다.

     

    정기결제 주문의 경우에는 post_type을 cosmosfarm_order로 등록하고 있습니다.

    정기결제 주문 관련된 파일은

    /wp-content/plugins/cosmosfarm-members/class/Cosmosfarm_Members_Subscription_Order.class.php 파일입니다.

     

    실제 관리자 페이지에서 정기결제 상품 저장은

    /wp-content/plugins/cosmosfarm-members/class/Cosmosfarm_Members_Controller.class.php 파일에

    product_save 메소드에서 하고 있습니다.

     

    코어 파일을 수정하지 않고 가능한 방법이 있을지 연구해보겠습니다.

    고맙습니다.

  • 제가 찾은 소스에 보면 두꺼운 폰트부분을 추가하려고 합니다.

    /plugins/cosmofarm-members/admin/subscription_product_setting.php

                        <tr valign="top">
                            <th scope="row"><label for="product_price">기본가격</label> <span style="font-size:12px;color:red;">(필수)</span></th>
                            <td>
                                <input type="number" id="product_price" name="product_price" value="<?php echo $product->price()?>">원
                            </td>
                        </tr>


                        <tr valign="top">
                            <th scope="row"><label for="product_price">가격</label> <span style="font-size:12px;color:red;">(필수)</span></th>
                            <td>
                                <input type="number" id="product_price" name="product_price" value="<?php echo $product->price()?>">원
                                <p class="description">0원 이상의 가격을 입력해주세요. 특수문자 제외하고 숫자만 입력해주세요.</p>
                            </td>
                        </tr>

     

    그리고 다른 소스에 
    /plugins/cosmofarm-members/class/Cosmosfarm_Members_Subscription_Product_Table.class.php

        public function get_columns(){
            return array(
                'cb' => '<input type="checkbox">',
                'title' => '상품 이름',
                'thumbnail' => '썸네일',
                'price' => '기본가격',
                'price' => '가격',
                'type' => '이용기간',
                'active' => '정기결제',
                'first_free' => '첫 결제 무료 이용기간',
                'role' => '사용자 역할(Role)',
                'multiple_pay' => '여러번 결제 가능',
            );
        }

     

    103열에

            if(in_array('price', $column_keys)){
                echo '<td class="column-price" data-colname="기본가격">';
                echo cosmosfarm_members_currency_format($product->price());
                echo '</td>';
            }

     

    결제페이지에도 해당 기본가격이 표현하도록 하려고 합니다.

    해당 페이지는
    /cosmosfarm-members/skin/default/subscription-product.php

        <div class="subscription-description subscription-price">
        <?php if($product->first_price() && $product->first_price() != $product->price()):?>
            <span class="subscription-price">기본가격</span>
            <span class="subscription-arrow">&rarr;</span>
            <span class="subscription-first-price">결제 가격 <?php echo cosmosfarm_members_currency_format($product->price())?></span>

            <span class="subscription-arrow">&rarr;</span>
            <span class="subscription-first-price">첫 결제 가격 <?php echo cosmosfarm_members_currency_format($product->first_price())?></span>
        <?php else:?>
            <?php echo cosmosfarm_members_currency_format($product->price())?>    
        <?php endif?>
        </div>

    해당 코드들을 나름 이렇게 만들면 될 거 같은데...제가 빠진곳이 있을 수 있겠지만 해당 price 호출 값처럼 제가 따로 다른 호출값을 만들면 될 거 같은데 이걸 어디에 추가를 해야 할지 의견드립니다.
    데이터베이스에 테이블을 뒤져봐도 해당 wp_cosmosfarm_members_activity_history 나 관련 테이블엔 없어서요.

    친절한 답변 부탁드립니다.

    감사합니다. 

  • 저 이게 코스모스팜 정기결제 페이지에 결제정보 입력필드에 적용되는 건가요?
    제가 말씀드린 부분을 캡쳐화면을 보여드리겠습니다.
    이미지 보시면 빨간박스 부분에 기본가격 입력필드를 넣고 싶습니다.

  • 안녕하세요~^^

    우커머스 체크아웃 필드 관련해서는

    구글에 검색해보시면 이외 다른 플러그인이 있을 수 있지만

    아래와 같은 플러그인을 설치해서 사용해보시겠어요?

    WooCommerce Checkout Field Editor (Manager) Pro

    WooCommerce Checkout Manager

     

    상황에 따라서는 우커머스 쪽 파일을 커스텀해야 할 수도 있습니다.

    우커머스 플러그인 레이아웃 관련 파일은

    FTP로 접속해서 /wp-content/plugins/woocommerce/templates/ 경로에서 확인해보실 수 있습니다.

    /wp-content/themes/사용중인테마/woocommerce/ 경로에 파일을 복사해서 커스텀하실 수 있습니다.

    자세한 방법은 아래 링크를 참고해주세요.

    https://docs.woocommerce.com/document/template-structure/

    고맙습니다.

  • 네 친절한 답변 감사드립니다.^^

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요