0

私は現在、人々がCMS内で新しいコンテンツブロックを作成できるようにするPHPクラスに取り組んでいます。私ができるようにしたいのは、ユーザーがクラスに入力名、値、およびおよびその他のオプション (選択済みと考える、およびチェックボックスとラジオ ボタンのオプション)

私の最初の問題は、現在これを行っているクラスにそのデータを送信するのに問題があることです。

homepageSlider->add_meta_box(
    'Book Info',
    array(
        'Year' => array(
            'type' => 'checkbox',
            array(
                'options' => 'Year 1',
                'Year 2',
                'Year 3'
            )
        ),
        'Genre' => 'text'
    )
);

上の図では、book info というコンテンツ ブロックを作成していることがわかります。このコンテンツ タイプには、Year (3 つのチェックボックスがある) と、テキスト フィールドになる Genre という 2 つのフォーム フィールドがあります。

私の質問は、この方法が機能していないようだということです。上記の配列の各部分をループして、必要なすべての情報を吐き出す方法がわかりません。誰でもこれに光を当てることができますか?

多次元になるように配列を正しく形成していますか? これが必要だと私が信じていることですか、それとも私のクラスの問題でしょうか?

function() use( $box_id, $box_title, $post_type_name, $box_context, $box_priority, $fields )
{
    add_meta_box(
        $box_id,
        $box_title,
        function( $post, $data )
        {
            global $post;

            // Nonce field for some validation
            wp_nonce_field( plugin_basename( __FILE__ ), 'custom_post_type' );

            // Get all inputs from $data
            $custom_fields = $data['args'][0];

            // Get the saved values
            $meta = get_post_custom( $post->ID );

            //die(print_r($custom_fields));
            // Check the array and loop through it
            if( ! empty( $custom_fields ) )
            {

                /* Loop through $custom_fields */
                foreach( $custom_fields as $label => $type )
                {
                    $field_id_name  = strtolower( str_replace( ' ', '_', $data['id'] ) ) . '_' . strtolower( str_replace( ' ', '_', $label ) );
                    echo '<label for="' . $field_id_name . '">' . $label . '</label>';
                    //self::getFormField($type, $field_id_name);
                    //<input type="'. self:getFormField($type) . '" name="custom_meta[' . $field_id_name . ']" id="' . $field_id_name . '" value="' . $meta[$field_id_name][0] . '" />';
                }
            }

        },
        $post_type_name,
        $box_context,
        $box_priority,
        array( $fields )
    );
}
4

1 に答える 1

0

配列を間違って形成していると思います。

homepageSlider->add_meta_box(   
    'Book Info',
    array(  
        'Year' => array('type' => 'checkbox' , 'options' => array('Year 1', 'Year 2', 'Year 3')),  
        'Genre' => array('type' => 'text'),
    )  
);

しかし、それは乱雑に見えます。このような配列でそれを行うのは直感的な方法ではないと思います。これをクラスに抽象化することを考えましたか? 私はこのようなものがもっときれいになると思います:

class metaBox {
     private $inputFields = array();
     public function addField($inputFieldObject) {
       $this->inputFields[] = $inputFieldObject;
     }
}

class inputField {
     public $type = "";  // which tags
     public $attributes; // which attributes
}
于 2013-02-14T10:12:25.740 に答える