本文整理汇总了PHP中wpcf_form_simple函数的典型用法代码示例。如果您正苦于以下问题:PHP wpcf_form_simple函数的具体用法?PHP wpcf_form_simple怎么用?PHP wpcf_form_simple使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了wpcf_form_simple函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: wpcf_fields_checkboxes_editor_callback
/**
* Editor callback form.
*/
function wpcf_fields_checkboxes_editor_callback()
{
$form = array();
$form['#form']['callback'] = 'wpcf_fields_checkboxes_editor_submit';
$form['display'] = array('#type' => 'radios', '#default_value' => 'display_all', '#name' => 'display', '#options' => array('display_from_db' => array('#title' => __('Display the value of this field from the database', 'wpcf'), '#name' => 'display', '#value' => 'db', '#inline' => true, '#after' => '<br />'), 'display_all' => array('#title' => __('Display all values with separator', 'wpcf'), '#name' => 'display', '#value' => 'display_all', '#inline' => true, '#after' => ' ' . wpcf_form_simple(array('separator' => array('#type' => 'textfield', '#name' => 'separator', '#value' => ', ', '#inline' => true))) . '<br />'), 'display_values' => array('#title' => __('Show one of these two values:', 'wpcf'), '#name' => 'display', '#value' => 'value')), '#inline' => true);
if (isset($_GET['field_id'])) {
$field = wpcf_admin_fields_get_field($_GET['field_id']);
if (!empty($field['data']['options'])) {
foreach ($field['data']['options'] as $option_key => $option) {
$form[$option_key . '-markup'] = array('#type' => 'markup', '#markup' => '<h3>' . $option['title'] . '</h3>');
$form[$option_key . '-display-value-1'] = array('#type' => 'textfield', '#title' => '<td style="text-align:right;">' . __('Not selected:', 'wpcf') . '</td><td>', '#name' => 'options[' . $option_key . '][display_value_not_selected]', '#value' => $option['display_value_not_selected'], '#inline' => true, '#before' => '<table><tr>', '#after' => '</td></tr>');
$form[$option_key . '-display-value-2'] = array('#type' => 'textfield', '#title' => '<td style="text-align:right;">' . __('Selected:', 'wpcf') . '</td><td>', '#name' => 'options[' . $option_key . '][display_value_selected]', '#value' => $option['display_value_selected'], '#after' => '</tr></table>');
}
}
}
$form['submit'] = array('#type' => 'submit', '#name' => 'submit', '#value' => __('Save Changes'), '#attributes' => array('class' => 'button-primary'));
$f = wpcf_form('wpcf-form', $form);
wpcf_admin_ajax_head('Insert checkbox', 'wpcf');
echo '<form method="post" action="">';
echo $f->renderForm();
echo '</form>';
wpcf_admin_ajax_footer();
}
示例2: wpcf_ajax_embedded
//.........这里部分代码省略.........
}
if ( !defined( 'WPTOOLSET_FORMS_VERSION' ) ) {
echo json_encode( array(
'output' => $output,
) );
} else {
echo json_encode( array(
'output' => $output,
'conditionals' => array('#post' => wptoolset_form_get_conditional_data( 'post' )),
) );
}
break;*/
/* Usermeta */
case 'um_repetitive_add':
if (isset($_GET['user_id'])) {
$user_id = $_GET['user_id'];
} else {
$user_id = wpcf_usermeta_get_user();
}
if (isset($_GET['field_id']) && current_user_can('edit_user', $user_id)) {
require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php';
require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields-post.php';
require_once WPCF_EMBEDDED_INC_ABSPATH . '/usermeta-post.php';
$field = wpcf_admin_fields_get_field(sanitize_text_field($_GET['field_id']), false, false, false, 'wpcf-usermeta');
global $wpcf;
$wpcf->usermeta_repeater->set($user_id, $field);
/*
*
* Force empty values!
*/
$wpcf->usermeta_repeater->cf['value'] = null;
$wpcf->usermeta_repeater->meta = null;
$form = $wpcf->usermeta_repeater->get_field_form(null, true);
echo json_encode(array('output' => wpcf_form_simple($form) . wpcf_form_render_js_validation('#your-profile', false)));
} else {
echo json_encode(array('output' => 'params missing'));
}
break;
case 'um_repetitive_delete':
if (isset($_POST['user_id']) && isset($_POST['field_id']) && current_user_can('edit_user', intval($_POST['user_id']))) {
require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php';
$user_id = intval($_POST['user_id']);
$field = wpcf_admin_fields_get_field(sanitize_text_field($_POST['field_id']), false, false, false, 'wpcf-usermeta');
$meta_id = intval($_POST['meta_id']);
if (!empty($field) && !empty($user_id) && !empty($meta_id)) {
/*
*
*
* Changed.
* Since Types 1.2
*/
global $wpcf;
$wpcf->usermeta_repeater->set($user_id, $field);
$wpcf->usermeta_repeater->delete($meta_id);
echo json_encode(array('output' => 'deleted'));
} else {
echo json_encode(array('output' => 'field or post not found'));
}
} else {
echo json_encode(array('output' => 'params missing'));
}
break;
/* End Usermeta */
/* End Usermeta */
case 'repetitive_add':
if (current_user_can('edit_posts') && isset($_GET['field_id'])) {
示例3: wpcf_pr_admin_edit_fields
/**
* Edit fields form.
*
* @global type $wpdb
* @param type $parent
* @param type $child
*/
function wpcf_pr_admin_edit_fields($parent, $child)
{
global $wpdb;
$post_type_parent = get_post_type_object($parent);
$post_type_child = get_post_type_object($child);
if (empty($post_type_parent) || empty($post_type_child)) {
die(__('Wrong post types'));
}
$relationships = get_option('wpcf_post_relationship', array());
if (!isset($relationships[$parent][$child])) {
die(__('Relationship do not exist'));
}
$data = $relationships[$parent][$child];
wp_enqueue_script('jquery');
wpcf_admin_ajax_head('Edit fields', 'wpcf');
// Process submit
if (isset($_POST['_wpnonce']) && wp_verify_nonce($_POST['_wpnonce'], 'pt_edit_fields')) {
$relationships[$parent][$child]['fields_setting'] = $_POST['fields_setting'];
$relationships[$parent][$child]['fields'] = isset($_POST['fields']) ? $_POST['fields'] : array();
update_option('wpcf_post_relationship', $relationships);
?>
<script type="text/javascript">
window.parent.jQuery('#TB_closeWindowButton').trigger('click');
window.parent.location.reload();
</script>
<?php
die;
}
$form = array();
$form['select'] = array('#type' => 'radios', '#name' => 'fields_setting', '#options' => array(__('Title, all custom fields and parents', 'wpcf') => 'all_cf', __('All fields, including the standard post fields', 'wpcf') => 'all_cf_standard', __('Specific fields', 'wpcf') => 'specific'), '#default_value' => empty($data['fields_setting']) ? 'all_cf' : $data['fields_setting']);
$options = array();
$options['_wp_title'] = array('#title' => __('Post title', 'wpcf'), '#name' => 'fields[_wp_title]', '#default_value' => isset($data['fields']['_wp_title']) ? 1 : 0);
$options['_wp_body'] = array('#title' => __('Post body', 'wpcf'), '#name' => 'fields[_wp_body]', '#default_value' => isset($data['fields']['_wp_body']) ? 1 : 0);
// $wpcf_fields = wpcf_admin_fields_get_fields(true);
$groups = wpcf_admin_get_groups_by_post_type($child);
foreach ($groups as $group) {
$fields = wpcf_admin_fields_get_fields_by_group($group['id']);
foreach ($fields as $key => $cf) {
$options[WPCF_META_PREFIX . $key] = array();
$options[WPCF_META_PREFIX . $key]['#title'] = $cf['name'];
$options[WPCF_META_PREFIX . $key]['#name'] = 'fields[' . WPCF_META_PREFIX . $key . ']';
$options[WPCF_META_PREFIX . $key]['#default_value'] = isset($data['fields'][WPCF_META_PREFIX . $key]) ? 1 : 0;
}
}
$temp_belongs = wpcf_pr_admin_get_belongs($child);
foreach ($temp_belongs as $temp_parent => $temp_data) {
if ($temp_parent == $parent) {
continue;
}
$temp_parent_type = get_post_type_object($temp_parent);
$options[$temp_parent] = array();
$options[$temp_parent]['#title'] = $temp_parent_type->label;
$options[$temp_parent]['#name'] = 'fields[_wpcf_pr_parents][' . $temp_parent . ']';
$options[$temp_parent]['#default_value'] = isset($data['fields']['_wpcf_pr_parents'][$temp_parent]) ? 1 : 0;
}
// foreach ($wpcf_fields as $key => $cf) {
// $options[WPCF_META_PREFIX . $key] = array();
// $options[WPCF_META_PREFIX . $key]['#title'] = $cf['name'];
// $options[WPCF_META_PREFIX . $key]['#name'] = 'fields[' . WPCF_META_PREFIX . $key . ']';
// $options[WPCF_META_PREFIX . $key]['#default_value'] = isset($data['fields'][WPCF_META_PREFIX . $key]) ? 1 : 0;
// }
// $cf_all = $wpdb->get_results("
// SELECT meta_id, meta_key
// FROM $wpdb->postmeta
// GROUP BY meta_key
// HAVING meta_key NOT LIKE '\_%'
// ORDER BY meta_key");
// foreach ($cf_all as $key => $cf) {
// if (isset($options[$cf->meta_key])) {
// continue;
// }
// $options[$key] = array();
// $options[$key]['#title'] = $cf->meta_key;
// $options[$key]['#name'] = 'fields[' . $cf->meta_key . ']';
// $options[$key]['#default_value'] = isset($data['fields'][$cf->meta_key]) ? 1 : 0;
// }
$form['specific'] = array('#type' => 'checkboxes', '#name' => 'fields', '#options' => $options, '#default_value' => isset($data['fields']), '#before' => '<div id="wpcf-specific" style="display:none;margin:10px 0 0 20px;">', '#after' => '</div>');
$form['submit'] = array('#type' => 'submit', '#name' => 'submit', '#value' => __('Save'), '#attributes' => array('class' => 'button-primary'));
echo '<form method="post" action="">';
echo wpcf_form_simple($form);
echo wp_nonce_field('pt_edit_fields');
echo '</form>';
?>
<script type="text/javascript">
jQuery(document).ready(function(){
if (jQuery('input[name="fields_setting"]:checked').val() == 'specific') {
jQuery('#wpcf-specific').show();
}
jQuery('input[name="fields_setting"]').change(function(){
if (jQuery(this).val() == 'specific') {
jQuery('#wpcf-specific').slideDown();
} else {
jQuery('#wpcf-specific').slideUp();
//.........这里部分代码省略.........
示例4: wpcf_admin_post_meta_box
/**
* Renders meta box content.
*
* Core function. Works and stable.
* If required, add hooks only.
*
* @todo Revise this 1.1.5
*
* @param type $post
* @param type $group
*/
function wpcf_admin_post_meta_box($post, $group)
{
global $wpcf;
static $nonce_added = false;
/*
* TODO Document where this is used
*/
if (!$nonce_added) {
$nonce_action = 'update-' . $post->post_type . '_' . $post->ID;
wp_nonce_field($nonce_action, '_wpcf_post_wpnonce');
$nonce_added = true;
}
/*
* TODO Move to Conditional code
*
* This is already checked. Use hook to add wrapper DIVS and apply CSS.
*/
if (!empty($group['args']['_conditional_display'])) {
if ($group['args']['_conditional_display'] == 'failed') {
echo '<div class="wpcf-cd-group wpcf-cd-group-failed" style="display:none;">';
} else {
echo '<div class="wpcf-cd-group wpcf-cd-group-passed">';
}
}
/*
* TODO Move this into Field code
* Process fields
*/
if (!empty($group['args']['fields'])) {
// Display description
if (!empty($group['args']['description'])) {
echo '<div class="wpcf-meta-box-description">' . wpautop(wpcf_translate('group ' . $group['args']['id'] . ' description', $group['args']['description'])) . '</div>';
}
foreach ($group['args']['fields'] as $field_slug => $field) {
if (empty($field) || !is_array($field)) {
continue;
}
$field = $wpcf->field->_parse_cf_form_element($field);
if (!isset($field['#id'])) {
$field['#id'] = wpcf_unique_id(serialize($field));
}
// Render form elements
if (wpcf_compare_wp_version() && $field['#type'] == 'wysiwyg') {
// Especially for WYSIWYG
echo '<div class="wpcf-wysiwyg">';
echo '<div id="wpcf-textarea-textarea-wrapper" class="form-item form-item-textarea wpcf-form-item wpcf-form-item-textarea">';
echo isset($field['#before']) ? $field['#before'] : '';
echo '
<label class="wpcf-form-label wpcf-form-textarea-label">' . $field['#title'] . '</label>';
echo '<div class="description wpcf-form-description wpcf-form-description-textarea description-textarea">
' . wpautop($field['#description']) . '</div>';
wp_editor($field['#value'], $field['#id'], $field['#editor_settings']);
$field['slug'] = str_replace(WPCF_META_PREFIX . 'wysiwyg-', '', $field_slug);
$field['type'] = 'wysiwyg';
echo '</div>';
echo isset($field['#after']) ? $field['#after'] : '';
echo '</div><br /><br />';
} else {
if ($field['#type'] == 'wysiwyg') {
$field['#type'] = 'textarea';
}
echo wpcf_form_simple(array($field['#id'] => $field));
}
do_action('wpcf_fields_' . $field_slug . '_meta_box_form', $field);
if (isset($field['wpcf-type'])) {
// May be ignored
do_action('wpcf_fields_' . $field['wpcf-type'] . '_meta_box_form', $field);
}
}
}
/*
* TODO Move to Conditional code
*
* This is already checked. Use hook to add wrapper DIVS and apply CSS.
*/
if (!empty($group['args']['_conditional_display'])) {
echo '</div>';
}
}
示例5: wpcf_fields_date_editor_callback
/**
* TinyMCE editor form.
*/
function wpcf_fields_date_editor_callback()
{
$last_settings = wpcf_admin_fields_get_field_last_settings($_GET['field_id']);
wp_enqueue_script('jquery');
$form = array();
$form['#form']['callback'] = 'wpcf_fields_date_editor_form_submit';
$form['style'] = array('#type' => 'radios', '#name' => 'wpcf[style]', '#options' => array(__('Show as calendar', 'wpcf') => 'calendar', __('Show as text', 'wpcf') => 'text'), '#default_value' => isset($last_settings['style']) ? $last_settings['style'] : 'text', '#after' => '<br />');
$date_formats = apply_filters('date_formats', array(__('F j, Y'), 'Y/m/d', 'm/d/Y', 'd/m/Y'));
$options = array();
foreach ($date_formats as $format) {
$title = date($format, time());
$field['#title'] = $title;
$field['#value'] = $format;
$options[] = $field;
}
$custom_format = isset($last_settings['format-custom']) ? $last_settings['format-custom'] : get_option('date_format');
$options[] = array('#title' => __('Custom', 'wpcf'), '#value' => 'custom', '#suffix' => wpcf_form_simple(array('custom' => array('#name' => 'wpcf[format-custom]', '#type' => 'textfield', '#value' => $custom_format, '#suffix' => ' ' . date($custom_format, time()), '#inline' => true))));
$form['toggle-open'] = array('#type' => 'markup', '#markup' => '<div id="wpcf-toggle" style="display:none;">');
$form['format'] = array('#type' => 'radios', '#name' => 'wpcf[format]', '#options' => $options, '#default_value' => isset($last_settings['format']) ? $last_settings['format'] : get_option('date_format'), '#after' => '<a href="http://codex.wordpress.org/Formatting_Date_and_Time" target="_blank">' . __('Documentation on date and time formatting', 'wpcf') . '</a>');
$form['toggle-close'] = array('#type' => 'markup', '#markup' => '</div>');
$form['field_id'] = array('#type' => 'hidden', '#name' => 'wpcf[field_id]', '#value' => $_GET['field_id']);
$form['submit'] = array('#type' => 'submit', '#name' => 'submit', '#value' => __('Insert date', 'wpcf'), '#attributes' => array('class' => 'button-primary'));
$f = wpcf_form('wpcf-fields-date-editor', $form);
add_action('admin_head_wpcf_ajax', 'wpcf_fields_date_editor_form_script');
wpcf_admin_ajax_head(__('Insert date', 'wpcf'));
echo '<form id="wpcf-form" method="post" action="">';
echo $f->renderForm();
echo '</form>';
wpcf_admin_ajax_footer();
}
示例6: wpcf_pr_admin_edit_fields
/**
* Edit fields form.
*
* @global type $wpdb
* @param type $parent
* @param type $child
*/
function wpcf_pr_admin_edit_fields($parent, $child)
{
global $wpdb;
$post_type_parent = get_post_type_object($parent);
$post_type_child = get_post_type_object($child);
if (empty($post_type_parent) || empty($post_type_child)) {
die(__('Wrong post types'));
}
$relationships = get_option('wpcf_post_relationship', array());
if (!isset($relationships[$parent][$child])) {
die(__('Relationship do not exist'));
}
$data = $relationships[$parent][$child];
wp_enqueue_script('jquery');
wpcf_admin_ajax_head('Edit fields', 'wpcf');
// Process submit
if (isset($_POST['_wpnonce']) && wp_verify_nonce($_POST['_wpnonce'], 'pt_edit_fields')) {
$relationships[$parent][$child]['fields_setting'] = $_POST['fields_setting'];
$relationships[$parent][$child]['fields'] = isset($_POST['fields']) ? $_POST['fields'] : array();
update_option('wpcf_post_relationship', $relationships);
?>
<script type="text/javascript">
window.parent.jQuery('#TB_closeWindowButton').trigger('click');
window.parent.location.reload();
</script>
<?php
die;
}
$groups = wpcf_admin_get_groups_by_post_type($child);
$options_cf = array();
$repetitive_warning = false;
$repetitive_warning_markup = array();
$repetitive_warning_txt = __('Repeating fields should not be used in child posts. Types will update all field values.', 'wpcf');
foreach ($groups as $group) {
$fields = wpcf_admin_fields_get_fields_by_group($group['id']);
foreach ($fields as $key => $cf) {
$options_cf[WPCF_META_PREFIX . $key] = array();
$options_cf[WPCF_META_PREFIX . $key]['#title'] = $cf['name'];
$options_cf[WPCF_META_PREFIX . $key]['#name'] = 'fields[' . WPCF_META_PREFIX . $key . ']';
$options_cf[WPCF_META_PREFIX . $key]['#default_value'] = isset($data['fields'][WPCF_META_PREFIX . $key]) ? 1 : 0;
// Repetitive warning
if (wpcf_admin_is_repetitive($cf)) {
if (!$repetitive_warning) {
$repetitive_warning_markup = array('#type' => 'markup', '#markup' => '<div class="message error" style="display:none;" id="wpcf-repetitive-warning"><p>' . $repetitive_warning_txt . '</p></div>');
}
$repetitive_warning = true;
$options_cf[WPCF_META_PREFIX . $key]['#after'] = !isset($data['fields'][WPCF_META_PREFIX . $key]) ? '<div class="message error" style="display:none;"><p>' : '<div class="message error"><p>';
$options_cf[WPCF_META_PREFIX . $key]['#after'] .= $repetitive_warning_txt;
$options_cf[WPCF_META_PREFIX . $key]['#after'] .= '</p></div>';
$options_cf[WPCF_META_PREFIX . $key]['#attributes'] = array('onclick' => 'jQuery(this).parent().find(\'.message\').toggle();');
}
}
}
$form = array();
$form['repetitive_warning_markup'] = $repetitive_warning_markup;
$form['select'] = array('#type' => 'radios', '#name' => 'fields_setting', '#options' => array(__('Title, all custom fields and parents', 'wpcf') => 'all_cf', __('All fields, including the standard post fields', 'wpcf') => 'all_cf_standard', __('Specific fields', 'wpcf') => 'specific'), '#default_value' => empty($data['fields_setting']) ? 'all_cf' : $data['fields_setting']);
$options = array();
$options['_wp_title'] = array('#title' => __('Post title', 'wpcf'), '#name' => 'fields[_wp_title]', '#default_value' => isset($data['fields']['_wp_title']) ? 1 : 0);
$options['_wp_body'] = array('#title' => __('Post body', 'wpcf'), '#name' => 'fields[_wp_body]', '#default_value' => isset($data['fields']['_wp_body']) ? 1 : 0);
$options = $options + $options_cf;
$temp_belongs = wpcf_pr_admin_get_belongs($child);
foreach ($temp_belongs as $temp_parent => $temp_data) {
if ($temp_parent == $parent) {
continue;
}
$temp_parent_type = get_post_type_object($temp_parent);
$options[$temp_parent] = array();
$options[$temp_parent]['#title'] = $temp_parent_type->label;
$options[$temp_parent]['#name'] = 'fields[_wpcf_pr_parents][' . $temp_parent . ']';
$options[$temp_parent]['#default_value'] = isset($data['fields']['_wpcf_pr_parents'][$temp_parent]) ? 1 : 0;
}
$form['specific'] = array('#type' => 'checkboxes', '#name' => 'fields', '#options' => $options, '#default_value' => isset($data['fields']), '#before' => '<div id="wpcf-specific" style="display:none;margin:10px 0 0 20px;">', '#after' => '</div>');
$form['submit'] = array('#type' => 'submit', '#name' => 'submit', '#value' => __('Save', 'wpcf'), '#attributes' => array('class' => 'button-primary'));
echo '<form method="post" action="">';
echo wpcf_form_simple($form);
echo wp_nonce_field('pt_edit_fields');
echo '</form>';
?>
<script type="text/javascript">
jQuery(document).ready(function(){
if (jQuery('input[name="fields_setting"]:checked').val() == 'specific') {
jQuery('#wpcf-specific').show();
} else {
<?php
if ($repetitive_warning) {
?>
jQuery('#wpcf-repetitive-warning').show();
<?php
}
?>
}
jQuery('input[name="fields_setting"]').change(function(){
if (jQuery(this).val() == 'specific') {
//.........这里部分代码省略.........
示例7: field_add_existed
/**
* Summary.
*
* Description.
*
* @since x.x.x
* @access (for functions: only use if private)
*
* @see Function/method/class relied on
* @link URL
* @global type $varname Description.
* @global type $varname Description.
*
* @param type $var Description.
* @param type $var Optional. Description.
* @return type Description.
*/
public function field_add_existed()
{
/**
* check nonce
*/
if (0 || !isset($_REQUEST['_wpnonce']) || !isset($_REQUEST['id']) || !wp_verify_nonce($_REQUEST['_wpnonce'], 'fields_insert')) {
$this->verification_failed_and_die();
}
/**
* get field definition
*/
require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php';
$field = wpcf_admin_fields_get_field(sanitize_text_field($_REQUEST['id']), false, true, false, $this->type);
if (!empty($field)) {
echo wpcf_form_simple($this->get_field_form_data($field['type'], $field));
}
die;
}
示例8: prepare_field_select_screen
//.........这里部分代码省略.........
/**
* check nonce
*/
if (0 || !isset($_REQUEST['_wpnonce']) || !isset($_REQUEST['parent']) || !isset($_REQUEST['child']) || !wp_verify_nonce($_REQUEST['_wpnonce'], $this->get_nonce('child-post-fields', $_REQUEST['parent'], $_REQUEST['child']))) {
$this->verification_failed_and_die();
}
$parent = $_REQUEST['parent'];
$child = $_REQUEST['child'];
$post_type_parent = get_post_type_object($parent);
$post_type_child = get_post_type_object($child);
if (empty($post_type_parent) || empty($post_type_child)) {
die(__('Wrong post types', 'wpcf'));
}
$relationships = get_option('wpcf_post_relationship', array());
if (!isset($relationships[$parent][$child])) {
$this->print_notice_and_die(__('Please save Post Type first to edit these fields.', 'wpcf'));
}
$repetitive_warning_markup = array();
$data = $relationships[$parent][$child];
$form = array();
$form['repetitive_warning_markup'] = $repetitive_warning_markup;
$form['select'] = array('#type' => 'radios', '#name' => 'fields_setting', '#options' => array(__('Title, all custom fields and parents', 'wpcf') => 'all_cf', __('Do not show management options for this post type', 'wpcf') => 'only_list', __('All fields, including the standard post fields', 'wpcf') => 'all_cf_standard', __('Specific fields', 'wpcf') => 'specific'), '#attributes' => array('display' => 'ul'), '#default_value' => empty($data['fields_setting']) ? 'all_cf' : $data['fields_setting']);
/**
* check default, to avoid missing configuration
*/
if (!in_array($form['select']['#default_value'], $form['select']['#options'])) {
$form['select']['#default_value'] = 'all_cf';
}
/**
* Specific options
*/
$groups = wpcf_admin_get_groups_by_post_type($child);
$options_cf = array();
$repetitive_warning = false;
$repetitive_warning_txt = __('Repeating fields should not be used in child posts. Types will update all field values.', 'wpcf');
foreach ($groups as $group) {
$fields = wpcf_admin_fields_get_fields_by_group($group['id']);
foreach ($fields as $key => $cf) {
$__key = wpcf_types_cf_under_control('check_outsider', $key) ? $key : WPCF_META_PREFIX . $key;
$options_cf[$__key] = array('#title' => $cf['name'], '#name' => 'fields[' . $__key . ']', '#default_value' => isset($data['fields'][$__key]) ? 1 : 0, '#inline' => true, '#before' => '<li>', '#after' => '</li>');
// Repetitive warning
if (wpcf_admin_is_repetitive($cf)) {
if (!$repetitive_warning) {
$repetitive_warning_markup = array('#type' => 'markup', '#markup' => '<div class="message error" style="display:none;" id="wpcf-repetitive-warning"><p>' . $repetitive_warning_txt . '</p></div>');
}
$repetitive_warning = true;
$options_cf[$__key]['#after'] = !isset($data['fields'][$__key]) ? '<div class="message error" style="display:none;"><p>' : '<div class="message error"><p>';
$options_cf[$__key]['#after'] .= $repetitive_warning_txt;
$options_cf[$__key]['#after'] .= '</p></div></li>';
$options_cf[$__key]['#attributes'] = array('onclick' => 'jQuery(this).parent().find(\'.message\').toggle();', 'disabled' => 'disabled');
}
}
}
/**
* build options for "Specific fields"
*/
$options = array();
/**
* check and add built-in properites
*/
require_once WPCF_INC_ABSPATH . '/post-relationship.php';
$supports = wpcf_post_relationship_get_supported_fields_by_post_type($child);
foreach ($supports as $child_field_key => $child_field_data) {
$options[$child_field_data['name']] = array('#title' => $child_field_data['title'], '#name' => sprintf('fields[%s]', $child_field_data['name']), '#default_value' => isset($data['fields'][$child_field_data['name']]) ? 1 : 0, '#inline' => true, '#before' => '<li>', '#after' => '</li>');
}
/**
* add custom fields
*/
$options = $options + $options_cf;
$temp_belongs = wpcf_pr_admin_get_belongs($child);
foreach ($temp_belongs as $temp_parent => $temp_data) {
if ($temp_parent == $parent) {
continue;
}
$temp_parent_type = get_post_type_object($temp_parent);
$options[$temp_parent] = array('#title' => $temp_parent_type->label, '#name' => 'fields[_wpcf_pr_parents][' . $temp_parent . ']', '#default_value' => isset($data['fields']['_wpcf_pr_parents'][$temp_parent]) ? 1 : 0, '#inline' => true, '#before' => '<li>', '#after' => '</li>');
}
/**
* remove "Specific fields" if there is no fields
*/
if (empty($options)) {
unset($form['select']['#options'][__('Specific fields', 'wpcf')]);
if ('specific' == $form['select']['#default_value']) {
$form['select']['#default_value'] = 'all_cf';
}
}
// Taxonomies
$taxonomies = get_object_taxonomies($post_type_child->name, 'objects');
if (!empty($taxonomies)) {
foreach ($taxonomies as $tax_id => $taxonomy) {
$options[$tax_id] = array('#title' => sprintf(__('Taxonomy - %s', 'wpcf'), $taxonomy->label), '#name' => 'fields[_wpcf_pr_taxonomies][' . $tax_id . ']', '#default_value' => isset($data['fields']['_wpcf_pr_taxonomies'][$tax_id]) ? 1 : 0, '#inline' => true, '#before' => '<li>', '#after' => '</li>');
}
}
$form['specific'] = array('#type' => 'checkboxes', '#name' => 'fields', '#options' => $options, '#default_value' => isset($data['fields']), '#before' => sprintf('<ul id="wpcf-specific" class="%s">', 'specific' == $form['select']['#default_value'] ? '' : 'hidden'), '#after' => '</ul>');
$form['nonce'] = array('#type' => 'hidden', '#value' => wp_create_nonce($this->get_nonce('child-post-fields-save', $parent, $child)), '#name' => 'wpcf-fields-save-nonce', '#id' => 'wpcf-fields-save-nonce');
$form['parent'] = array('#type' => 'hidden', '#value' => esc_attr($parent), '#name' => 'wpcf-parent', '#id' => 'wpcf-parent');
$form['child'] = array('#type' => 'hidden', '#value' => esc_attr($child), '#name' => 'wpcf-child', '#id' => 'wpcf-child');
echo wpcf_form_simple($form);
die;
}
示例9: wpcf_ajax_embedded
//.........这里部分代码省略.........
require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields-post.php';
require_once WPCF_EMBEDDED_ABSPATH . '/includes/post-relationship.php';
$output = 'Passed wrong parameters';
if (isset($_GET['field']) && isset($_GET['sort']) && isset($_GET['post_id']) && isset($_GET['post_type'])) {
$post = get_post($_GET['post_id']);
$post_type = $_GET['post_type'];
$has = wpcf_pr_admin_get_has($post->post_type);
$output = wpcf_pr_admin_post_meta_box_has_form($post, $post_type, $has[$post_type], $post->post_type);
}
echo json_encode(array('output' => $output));
break;
case 'pr_save_all':
require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php';
require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields-post.php';
require_once WPCF_EMBEDDED_ABSPATH . '/includes/post-relationship.php';
$output = array();
if (isset($_POST['post_id']) && isset($_POST['wpcf_post_relationship'])) {
$output = wpcf_pr_admin_save_post_hook($_POST['post_id']);
}
echo json_encode(array('output' => $output));
break;
case 'repetitive_add':
if (isset($_GET['field_id'])) {
require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php';
require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields-post.php';
$field = wpcf_admin_fields_get_field($_GET['field_id']);
// Pass as normal
unset($field['data']['repetitive']);
$fields = array($_GET['field_id'] => $field);
$element = wpcf_admin_post_process_fields(false, $fields, false, false, 'repetitive');
if ($field['type'] == 'skype') {
$key = key($element);
unset($element[$key]['#title']);
echo json_encode(array('output' => wpcf_form_simple($element) . wpcf_form_render_js_validation('#post', false)));
} else {
$element = array_shift($element);
if (!in_array($field['type'], array('checkbox'))) {
unset($element['#title']);
}
echo json_encode(array('output' => wpcf_form_simple(array('repetitive' => $element)) . wpcf_form_render_js_validation('#post', false)));
}
} else {
echo json_encode(array('output' => 'params missing'));
}
break;
case 'repetitive_delete':
if (isset($_POST['post_id']) && isset($_POST['field_id']) && isset($_POST['old_value'])) {
require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php';
$field = wpcf_admin_fields_get_field($_POST['field_id']);
if (!empty($field)) {
if ($field['type'] == 'date') {
delete_post_meta($_POST['post_id'], wpcf_types_get_meta_prefix($field) . $field['id'], strtotime(base64_decode($_POST['old_value'])));
} else {
if ($field['type'] == 'skype') {
delete_post_meta($_POST['post_id'], wpcf_types_get_meta_prefix($field) . $field['id'], unserialize(base64_decode($_POST['old_value'])));
} else {
delete_post_meta($_POST['post_id'], wpcf_types_get_meta_prefix($field) . $field['id'], base64_decode($_POST['old_value']));
}
}
echo json_encode(array('output' => 'deleted'));
} else {
echo json_encode(array('output' => 'field not found'));
}
} else {
echo json_encode(array('output' => 'params missing'));
}
示例10: wpcf_fields_get_field_form
/**
* Returns HTML formatted field form (draggable).
*
* @param type $type
* @param type $form_data
* @return type
*/
function wpcf_fields_get_field_form($type, $form_data = array())
{
$form = wpcf_fields_get_field_form_data($type, $form_data);
if ($form) {
$return = '<div class="ui-draggable">' . wpcf_form_simple($form) . '</div>';
/**
* add extra condition check if this is checkbox
*/
foreach ($form as $key => $value) {
if (!array_key_exists('value', $value) || !array_key_exists('#attributes', $value['value']) || !array_key_exists('data-wpcf-type', $value['value']['#attributes']) || 'checkbox' != $value['value']['#attributes']['data-wpcf-type']) {
continue;
}
echo '<script type="text/javascript">';
printf('jQuery(document).ready(function($){wpcf_checkbox_value_zero(jQuery(\'[name="%s"]\'));});', $value['value']['#name']);
echo '</script>';
}
return $return;
}
return '<div>' . __('Wrong field requested', 'wpcf') . '</div>';
}
示例11: wpcf_admin_post_meta_box
/**
* Renders meta box content.
*
* @param type $post
* @param type $group
*/
function wpcf_admin_post_meta_box($post, $group)
{
if (!empty($group['args']['fields'])) {
// Display description
if (!empty($group['args']['description'])) {
echo '<div class="wpcf-meta-box-description">' . wpautop(wpcf_translate('group ' . $group['args']['id'] . ' description', $group['args']['description'])) . '</div>';
}
foreach ($group['args']['fields'] as $field_slug => $field) {
// Render form elements
if (wpcf_compare_wp_version() && $field['#type'] == 'wysiwyg') {
// Especially for WYSIWYG
unset($field['#before'], $field['#after']);
echo '<div class="wpcf-wysiwyg">';
echo '<div id="wpcf-textarea-textarea-wrapper" class="form-item form-item-textarea wpcf-form-item wpcf-form-item-textarea">
<label class="wpcf-form-label wpcf-form-textarea-label">' . $field['#title'] . '</label>';
echo '<div class="description wpcf-form-description wpcf-form-description-textarea description-textarea">
' . wpautop($field['#description']) . '</div>';
wp_editor($field['#value'], $field['#id'], $field['#editor_settings']);
$field['slug'] = str_replace(WPCF_META_PREFIX . 'wysiwyg-', '', $field_slug);
$field['type'] = 'wysiwyg';
echo '</div></div><br /><br />';
} else {
if ($field['#type'] == 'wysiwyg') {
$field['#type'] = 'textarea';
}
echo wpcf_form_simple(array($field['#id'] => $field));
}
do_action('wpcf_fields_' . $field_slug . '_meta_box_form', $field);
if (isset($field['wpcf-type'])) {
// May be ignored
do_action('wpcf_fields_' . $field['wpcf-type'] . '_meta_box_form', $field);
}
}
}
}
示例12: wpcf_ajax_embedded
//.........这里部分代码省略.........
echo json_encode(array('output' => $output));
break;
case 'pr_sort_parent':
$output = 'Passed wrong parameters';
if (isset($_GET['field']) && isset($_GET['sort']) && isset($_GET['post_id']) && isset($_GET['post_type'])) {
$output = $wpcf->relationship->child_meta_form(intval($_GET['post_id']), strval($_GET['post_type']));
}
echo json_encode(array('output' => $output));
break;
case 'repetitive_add':
if (isset($_GET['field_id'])) {
require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php';
require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields-post.php';
$field = wpcf_admin_fields_get_field($_GET['field_id']);
$post_id = intval($_GET['post_id']);
/*
* When post is new - post_id is 0
* We can safely set post_id to 1 cause
* values compared are filtered anyway.
*/
if ($post_id == 0) {
$post_id = 1;
}
$post = get_post($post_id);
global $wpcf;
$wpcf->repeater->set($post, $field);
/*
*
* Force empty values!
*/
$wpcf->repeater->cf['value'] = null;
$wpcf->repeater->meta = null;
$form = $wpcf->repeater->get_field_form(null, true);
echo json_encode(array('output' => wpcf_form_simple($form) . wpcf_form_render_js_validation('#post', false)));
} else {
echo json_encode(array('output' => 'params missing'));
}
break;
case 'repetitive_delete':
if (isset($_POST['post_id']) && isset($_POST['field_id'])) {
require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php';
$post = get_post($_POST['post_id']);
$field = wpcf_admin_fields_get_field($_POST['field_id']);
$meta_id = $_POST['meta_id'];
if (!empty($field) && !empty($post->ID) && !empty($meta_id)) {
/*
*
*
* Changed.
* Since Types 1.2
*/
global $wpcf;
$wpcf->repeater->set($post, $field);
$wpcf->repeater->delete($meta_id);
echo json_encode(array('output' => 'deleted'));
} else {
echo json_encode(array('output' => 'field or post not found'));
}
} else {
echo json_encode(array('output' => 'params missing'));
}
break;
case 'cd_verify':
require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php';
require_once WPCF_EMBEDDED_INC_ABSPATH . '/conditional-display.php';
global $wpcf;
示例13: wpcf_wpml_translation_options
function wpcf_wpml_translation_options($sections)
{
$wpml_installed = apply_filters('wpml_setting', false, 'setup_complete');
if ($wpml_installed) {
$settings = wpcf_get_settings();
$form['register_translations_on_import'] = array('#id' => 'register_translations_on_import', '#name' => 'wpcf_register_translations_on_import', '#type' => 'checkbox', '#label' => __("When importing, add texts to WPML's String Translation table", 'wpcf'), '#inline' => true, '#default_value' => !empty($settings['register_translations_on_import']), '#pattern' => '<p><ELEMENT><LABEL><DESCRIPTION></p>');
$section_content = wpcf_form_simple($form);
$sections['wpml-wpcf'] = array('slug' => 'wpml-wpcf', 'title' => __('Types and WPML integration', 'wpcf'), 'content' => $section_content);
}
return $sections;
}
示例14: wpcf_admin_import_export_settings_for_terms
/**
* Add form inputs related to term field group and field definition import.
*
* @param SimpleXMLElement $data Import data from XML
* @return array Enlimbo form elements (yuck).
* @since 2.1
*/
function wpcf_admin_import_export_settings_for_terms($data)
{
$form = array();
if (!empty($data->term_groups)) {
$form['title-terms'] = array('#type' => 'markup', '#markup' => '<h2>' . __('Term field groups to be added or updated', 'wpcf') . '</h2>');
$group_factory = Types_Field_Group_Term_Factory::get_instance();
$groups_check = array();
foreach ($data->term_groups->group as $group) {
$group = (array) $group;
$group_id = $group['ID'];
$group_slug = $group['post_title'];
$form['term-group-add-' . $group_id] = array('#type' => 'checkbox', '#name' => 'term_groups[' . $group_id . '][add]', '#default_value' => true, '#title' => '<strong>' . esc_html($group_slug) . '</strong>', '#inline' => true, '#after' => '<br /><br />');
$existing_groups = $group_factory->query_groups(array('name' => $group_slug, 'post_type' => $group['post_type']));
$group_already_exists = count($existing_groups) > 0;
if ($group_already_exists) {
$form['term-group-add-' . $group_id]['#after'] = wpcf_form_simple(array('term-group-add-update-' . $group_id => array('#type' => 'radios', '#name' => 'term_groups[' . $group_id . '][update]', '#inline' => true, '#options' => array(__('Update', 'wpcf') => 'update', __('Create new', 'wpcf') => 'add'), '#default_value' => 'update', '#before' => '<br />', '#after' => '<br />')));
}
$groups_check[] = $group_slug;
}
$groups_existing = get_posts(array('post_type' => Types_Field_Group_Term::POST_TYPE, 'post_status' => null));
if (!empty($groups_existing)) {
$groups_to_be_deleted = array();
foreach ($groups_existing as $post) {
if (!in_array($post->post_title, $groups_check)) {
$groups_to_be_deleted['<strong>' . $post->post_title . '</strong>'] = $post->ID;
}
}
if (!empty($groups_to_be_deleted)) {
$form['title-term-groups-deleted'] = array('#type' => 'markup', '#markup' => '<h2>' . __('Term groups to be deleted', 'wpcf') . '</h2>');
$form['term-groups-deleted'] = array('#type' => 'checkboxes', '#name' => 'term-groups-to-be-deleted', '#options' => $groups_to_be_deleted);
}
}
}
// Check term fields
if (!empty($data->term_fields)) {
$form['term-title-fields'] = array('#type' => 'markup', '#markup' => '<h2>' . __('Term fields to be added/updated', 'wpcf') . '</h2>');
$fields_existing = wpcf_admin_fields_get_fields(false, false, false, WPCF_Field_Definition_Factory_Term::FIELD_DEFINITIONS_OPTION);
$fields_check = array();
$fields_to_be_deleted = array();
foreach ($data->term_fields->field as $field) {
$field = (array) $field;
if (empty($field['id']) || empty($field['name'])) {
continue;
}
$form['term-field-add-' . $field['id']] = array('#type' => 'checkbox', '#name' => 'term_fields[' . $field['id'] . '][add]', '#default_value' => true, '#title' => '<strong>' . $field['name'] . '</strong>', '#inline' => true, '#after' => '<br />');
$fields_check[] = $field['id'];
}
foreach ($fields_existing as $field_id => $field) {
if (!in_array($field_id, $fields_check)) {
$fields_to_be_deleted['<strong>' . $field['name'] . '</strong>'] = $field['id'];
}
}
if (!empty($fields_to_be_deleted)) {
$form['term-title-fields-deleted'] = array('#type' => 'markup', '#markup' => '<h2>' . __('Term ields to be deleted', 'wpcf') . '</h2>');
$form['term-fields-deleted'] = array('#type' => 'checkboxes', '#name' => 'term-fields-to-be-deleted', '#options' => $fields_to_be_deleted);
}
}
return $form;
}
示例15: wpcf_admin_import_export_settings
/**
* Import settings.
*
* @global type $wpdb
* @param SimpleXMLElement $data
* @return string
*/
function wpcf_admin_import_export_settings($data)
{
global $wpdb;
$form = array();
$form['title'] = array('#type' => 'markup', '#markup' => '<h2>' . __('General Settings', 'wpcf') . '</h2>');
$form['overwrite-or-add-groups'] = array('#type' => 'checkbox', '#title' => __('Bulk overwrite groups if exist', 'wpcf'), '#name' => 'overwrite-groups', '#inline' => true, '#after' => '<br />');
$form['delete-groups'] = array('#type' => 'checkbox', '#title' => __("Delete group if don't exist", 'wpcf'), '#name' => 'delete-groups', '#inline' => true, '#after' => '<br />');
$form['delete-fields'] = array('#type' => 'checkbox', '#title' => __("Delete field if don't exist", 'wpcf'), '#name' => 'delete-fields', '#inline' => true, '#after' => '<br />');
$form['delete-types'] = array('#type' => 'checkbox', '#title' => __("Delete custom post type if don't exist", 'wpcf'), '#name' => 'delete-types', '#inline' => true, '#after' => '<br />');
$form['delete-tax'] = array('#type' => 'checkbox', '#title' => __("Delete custom taxonomy if don't exist", 'wpcf'), '#name' => 'delete-tax', '#inline' => true, '#after' => '<br />');
libxml_use_internal_errors(true);
$data = simplexml_load_string($data);
if (!$data) {
echo '<div class="message error"><p>' . __('Error parsing XML', 'wpcf') . '</p></div>';
foreach (libxml_get_errors() as $error) {
echo '<div class="message error"><p>' . $error->message . '</p></div>';
}
libxml_clear_errors();
return false;
}
// $data = new SimpleXMLElement($data);
// Check groups
if (!empty($data->groups)) {
$form['title-1'] = array('#type' => 'markup', '#markup' => '<h2>' . __('Groups to be added/updated', 'wpcf') . '</h2>');
$groups_check = array();
foreach ($data->groups->group as $group) {
$group = (array) $group;
$form['group-add-' . $group['ID']] = array('#type' => 'checkbox', '#name' => 'groups[' . $group['ID'] . '][add]', '#default_value' => true, '#title' => '<strong>' . esc_html($group['post_title']) . '</strong>', '#inline' => true, '#after' => '<br /><br />');
$post = $wpdb->get_var($wpdb->prepare("SELECT ID FROM {$wpdb->posts}\n WHERE post_title = %s AND post_type = %s", $group['post_title'], $group['post_type']));
if (!empty($post)) {
$form['group-add-' . $group['ID']]['#after'] = wpcf_form_simple(array('group-add-update-' . $group['ID'] => array('#type' => 'radios', '#name' => 'groups[' . $group['ID'] . '][update]', '#inline' => true, '#options' => array(__('Update', 'wpcf') => 'update', __('Create new', 'wpcf') => 'add'), '#default_value' => 'update', '#before' => '<br />', '#after' => '<br />')));
}
$groups_check[] = $group['post_title'];
}
$groups_existing = get_posts('post_type=wp-types-group&post_status=null');
if (!empty($groups_existing)) {
$groups_to_be_deleted = array();
foreach ($groups_existing as $post) {
if (!in_array($post->post_title, $groups_check)) {
$groups_to_be_deleted['<strong>' . $post->post_title . '</strong>'] = $post->ID;
}
}
if (!empty($groups_to_be_deleted)) {
$form['title-groups-deleted'] = array('#type' => 'markup', '#markup' => '<h2>' . __('Groups to be deleted', 'wpcf') . '</h2>');
$form['groups-deleted'] = array('#type' => 'checkboxes', '#name' => 'groups-to-be-deleted', '#options' => $groups_to_be_deleted);
}
}
}
// Check fields
if (!empty($data->fields)) {
$form['title-fields'] = array('#type' => 'markup', '#markup' => '<h2>' . __('Fields to be added/updated', 'wpcf') . '</h2>');
$fields_existing = wpcf_admin_fields_get_fields();
$fields_check = array();
$fields_to_be_deleted = array();
foreach ($data->fields->field as $field) {
$field = (array) $field;
$form['field-add-' . $field['id']] = array('#type' => 'checkbox', '#name' => 'fields[' . $field['id'] . '][add]', '#default_value' => true, '#title' => '<strong>' . $field['name'] . '</strong>', '#inline' => true, '#after' => '<br />');
$fields_check[] = $field['id'];
}
foreach ($fields_existing as $field_id => $field) {
if (!in_array($field_id, $fields_check)) {
$fields_to_be_deleted['<strong>' . $field['name'] . '</strong>'] = $field['id'];
}
}
if (!empty($fields_to_be_deleted)) {
$form['title-fields-deleted'] = array('#type' => 'markup', '#markup' => '<h2>' . __('Fields to be deleted', 'wpcf') . '</h2>');
$form['fields-deleted'] = array('#type' => 'checkboxes', '#name' => 'fields-to-be-deleted', '#options' => $fields_to_be_deleted);
}
}
// Check types
if (!empty($data->types)) {
$form['title-types'] = array('#type' => 'markup', '#markup' => '<h2>' . __('Custom post types to be added/updated', 'wpcf') . '</h2>');
$types_existing = get_option('wpcf-custom-types', array());
$types_check = array();
$types_to_be_deleted = array();
foreach ($data->types->type as $type) {
$type = (array) $type;
$form['type-add-' . $type['id']] = array('#type' => 'checkbox', '#name' => 'types[' . $type['id'] . '][add]', '#default_value' => true, '#title' => '<strong>' . $type['labels']->name . '</strong>', '#inline' => true, '#after' => '<br />');
$types_check[] = $type['id'];
}
foreach ($types_existing as $type_id => $type) {
if (!in_array($type_id, $types_check)) {
$types_to_be_deleted['<strong>' . $type['labels']['name'] . '</strong>'] = $type_id;
}
}
if (!empty($types_to_be_deleted)) {
$form['title-types-deleted'] = array('#type' => 'markup', '#markup' => '<h2>' . __('Custom post types to be deleted', 'wpcf') . '</h2>');
$form['types-deleted'] = array('#type' => 'checkboxes', '#name' => 'types-to-be-deleted', '#options' => $types_to_be_deleted);
}
}
// Check taxonomies
if (!empty($data->taxonomies)) {
$form['title-tax'] = array('#type' => 'markup', '#markup' => '<h2>' . __('Custom taxonomies to be added/updated', 'wpcf') . '</h2>');
//.........这里部分代码省略.........