質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.80%

Wordpress welcart及びAdvanced Custom Fieldsの連携について

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 909

kitikiti

score 16

カスタムフィールドを使用するためにAdvanced Custom Fieldsのプラグインを利用して作成を行っていますが、フィールドグループで作成した他ののテンプレートまでが出てきてしまいます。
このフィールドグループを表示する条件(位置ルール)処理が全く反応していないようです。
作成したフィールドが全てwelcat(商品マスター編集画面)上に出てきてしまいます。
更新ができず困っています。
どのようにファイルを変更すればいいでしょうか。

下記フォーラムにて添付されているファイルを使用し利用しています。
https://www.welcart.com/community/forums/topic/advanced-custom-fields-%E3%81%A8%E3%81%AE%E9%80%A3%E5%8B%95%E3%81%AB%E9%96%A2%E3%81%97%E3%81%BE%E3%81%97%E3%81%A6

おそらくこのファイルをいじればなると思うのですが、よくわからず現在困っております。
おわかりになる方ご教授お願い致します。

    function admin_head() {

        // vars
        $style_found = false;


        // get field groups
        $field_groups = acf_get_field_groups();


        // add meta boxes
        if( !empty($field_groups) ) {

            foreach( $field_groups as $i => $field_group ) {

                // vars
                $id = "acf-{$field_group['key']}";
                $title = $field_group['title'];
                $context = $field_group['position'];
                $priority = 'high';
                $args = array( 
                    'field_group'    => $field_group,
                    'visibility'    => false
                );


                // tweaks to vars
                if( $context == 'side' ) {

                    $priority = 'core';

                }


                // filter for 3rd party customization
                $priority = apply_filters('acf/input/meta_box_priority', $priority, $field_group);


                // visibility
                $args['visibility'] = acf_get_field_group_visibility( $field_group, array(
                    'post_id'    => $this->post_id, 
                    'post_type'    => $this->typenow
                ));

                // add meta box
                add_meta_box( $id, $title, array($this, 'render_meta_box'), $this->typenow, $context, $priority, $args );


                // update style
                if( !$style_found && $args['visibility'] ) {

                    $style_found = true;

                    $this->style = acf_get_field_group_style( $field_group );

                }

            }

        }


        // Allow 'acf_after_title' metabox position
        add_action('edit_form_after_title', array($this, 'edit_form_after_title'));


        // remove ACF from meta postbox
        add_filter('is_protected_meta', array($this, 'is_protected_meta'), 10, 3);

    }


コード
/*
    *  edit_form_after_title
    *
    *  This action will allow ACF to render metaboxes after the title
    *
    *  @type    action
    *  @date    17/08/13
    *
    *  @param    n/a
    *  @return    n/a
    */

    function edit_form_after_title() {

        // globals
        global $post, $wp_meta_boxes;

        // render post data
        acf_form_data(array( 
            'post_id'    => $this->post_id, 
            'nonce'        => 'post',
            'ajax'        => 1
        ));


        // render
        do_meta_boxes( get_current_screen(), 'acf_after_title', $post);


        // clean up
        unset( $wp_meta_boxes['post']['acf_after_title'] );

    }


    /*
    *  render_meta_box
    *
    *  description
    *
    *  @type    function
    *  @date    20/10/13
    *  @since    5.0.0
    *
    *  @param    $post_id (int)
    *  @return    $post_id (int)
    */

    function render_meta_box( $post, $args ) {

        // extract args
        extract( $args ); // all variables from the add_meta_box function
        extract( $args ); // all variables from the args argument


        // vars
        $o = array(
            'id'            => $id,
            'key'            => $field_group['key'],
            'style'            => $field_group['style'],
            'label'            => $field_group['label_placement'],
            'edit_url'        => '',
            'edit_title'    => __('Edit field group', 'acf'),
            'visibility'    => $visibility
        );


        // edit_url
        if( $field_group['ID'] && acf_current_user_can_admin() ) {

            $o['edit_url'] = admin_url('post.php?post=' . $field_group['ID'] . '&action=edit');

        }


        // load and render fields    
        if( $visibility ) {

            // load fields
            $fields = acf_get_fields( $field_group );


            // render
            acf_render_fields( $this->post_id, $fields, 'div', $field_group['instruction_placement'] );

        // render replace-me div
        } else {

            echo '<div class="acf-replace-with-fields"><div class="acf-loading"></div></div>';

        }

    ?>
<script type="text/javascript">
if( typeof acf !== 'undefined' ) {

    acf.postbox.render(<?php echo json_encode($o); ?>);    

}
</script>
<?php

    }


    /*
    *  admin_footer
    *
    *  description
    *
    *  @type    function
    *  @date    21/10/13
    *  @since    5.0.0
    *
    *  @param    $post_id (int)
    *  @return    $post_id (int)
    */

    function admin_footer(){

        // get style of first field group
        echo '<style type="text/css" id="acf-style">' . $this->style . '</style>';

    }


    /*
    *  get_field_groups
    *
    *  This function will return all the JSON data needed to render new metaboxes
    *
    *  @type    function
    *  @date    21/10/13
    *  @since    5.0.0
    *
    *  @param    n/a
    *  @return    n/a
    */

    function get_field_groups() {

        // options
        $options = acf_parse_args($_POST, array(
            'nonce'        => '',
            'post_id'    => 0,
            'ajax'        => 1,
            'exists'    => array()
        ));


        // vars
        $json = array();
        $exists = acf_extract_var( $options, 'exists' );


        // verify nonce
        if( !acf_verify_ajax() ) die();


        // get field groups
        $field_groups = acf_get_field_groups( $options );


        // bail early if no field groups
        if( empty($field_groups) ) {

            wp_send_json_success( $json );

        }


        // loop through field groups
        foreach( $field_groups as $i => $field_group ) {

            // vars
            $item = array(
                //'ID'    => $field_group['ID'], - JSON does not have ID (not used by JS anyway)
                'key'    => $field_group['key'],
                'title'    => $field_group['title'],
                'html'    => '',
                'style' => ''
            );


            // style
            if( $i == 0 ) {

                $item['style'] = acf_get_field_group_style( $field_group );

            }


            // html
            if( !in_array($field_group['key'], $exists) ) {

                // load fields
                $fields = acf_get_fields( $field_group );


                // get field HTML
                ob_start();


                // render
                acf_render_fields( $options['post_id'], $fields, 'div', $field_group['instruction_placement'] );


                $item['html'] = ob_get_clean();


            }


            // append
            $json[] = $item;

        }


        // return
        wp_send_json_success( $json );

    }


    /*
    *  wp_insert_post_empty_content
    *
    *  This function will allow WP to insert a new post without title / content if ACF data exists
    *
    *  @type    function
    *  @date    16/07/2014
    *  @since    5.0.1
    *
    *  @param    $maybe_empty (bool) whether the post should be considered "empty"
    *  @param    $postarr (array) Array of post data
    *  @return    $maybe_empty
    */

    function wp_insert_post_empty_content( $maybe_empty, $postarr ) {

        if( $maybe_empty && !empty($_POST['_acfchanged']) ) {

            $maybe_empty = false;

        }


        // return
        return $maybe_empty;
    }


    /*
    *  allow_save_post
    *
    *  This function will return true if the post is allowed to be saved
    *
    *  @type    function
    *  @date    26/06/2016
    *  @since    5.3.8
    *
    *  @param    $post_id (int)
    *  @return    $post_id (int)
    */

    function allow_save_post( $post ) {

        // vars
        $allow = true;
        $reject = array( 'auto-draft', 'revision', 'acf-field', 'acf-field-group' );
        $wp_preview = acf_maybe_get($_POST, 'wp-preview');


        // check post type
        if( in_array($post->post_type, $reject) ) $allow = false;


        // allow preview
        if( $post->post_type == 'revision' && $wp_preview == 'dopreview' ) $allow = true;


        // return
        return $allow;

    }


    /*
    *  save_post
    *
    *  This function will validate and save the $_POST data
    *
    *  @type    function
    *  @date    23/06/12
    *  @since    1.0.0
    *
    *  @param    $post_id (int)
    *  @return    $post_id (int)
    */

    function save_post( $post_id, $post ) {

        // bail ealry if no allowed to save this post type
        if( !$this->allow_save_post($post) ) return $post_id;


        // ensure saving to the correct post
//        if( !acf_verify_nonce('post', $post_id) ) return $post_id;


        // validate for published post (allow draft to save without validation)
        if( $post->post_status == 'publish' ) {

            // show errors
            acf_validate_save_post( true );

        }


        // save
        acf_save_post( $post_id );


        // save revision
        if( post_type_supports($post->post_type, 'revisions') ) {

            acf_save_post_revision( $post_id );

        }


        // return
        return $post_id;

    }


    /*
    *  is_protected_meta
    *
    *  This function will remove any ACF meta from showing in the meta postbox
    *
    *  @type    function
    *  @date    12/04/2014
    *  @since    5.0.0
    *
    *  @param    $post_id (int)
    *  @return    $post_id (int)
    */

    function is_protected_meta( $protected, $meta_key, $meta_type ) {

        // if acf_get_field_reference returns a valid key, this is an acf value, so protect it!
        if( !$protected ) {

            $reference = acf_get_field_reference( $meta_key, $this->post_id );

            if( acf_is_field_key($reference) ) {

                $protected = true;

            } 

        }


        // return
        return $protected;

    }

}
endif; // class_exists check


global $acf;
if( $acf ){
    new acf_form_welcart_item();
}
コード
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

https://www.welcart.com/archives/techinfo/techinfo-20200218

パッチが公開されたようです!

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.80%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る