Skip to content

Commit 4a55018

Browse files
committed
Switch settings fields to components
1 parent dccb469 commit 4a55018

File tree

11 files changed

+475
-460
lines changed

11 files changed

+475
-460
lines changed

template/plugin-name/admin/class-settings.php

Lines changed: 39 additions & 401 deletions
Large diffs are not rendered by default.
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
if( isset( $data['name'], $_POST[ $data['name'] ] ) ) {
3+
$_POST[ $data['name'] ] = is_array( $_POST[ $data['name'] ] ) ? $_POST[ $data['name'] ] : array();
4+
update_option( $data['name'], $_POST[ $data['name'] ] );
5+
}
6+
if(isset($data['options']) && is_array($data['options'])) {
7+
?>
8+
<input type="hidden" name="<?php echo esc_attr( $data['name'] ?? '' ); ?>" value="">
9+
<div class="plugin-name-options">
10+
<?php
11+
$option_saved = get_option( $data['name'], array() );
12+
$option_saved = is_array( $option_saved ) ? $option_saved : array();
13+
foreach( $data['options'] as $key => $option ) {
14+
?>
15+
<label>
16+
<input
17+
type="checkbox"
18+
name="<?php echo esc_attr( $data['name'] ?? '' ); ?>[]"
19+
id="<?php echo esc_attr( $data['name'] ?? '' ) . "-$key"; ?>"
20+
value="<?php echo esc_attr( $option['value'] ?? '' ); ?>"
21+
<?php checked( in_array( $option['value'], $option_saved ) ); ?>
22+
>
23+
<?php echo esc_html( $option['label'] ?? '' ); ?>
24+
</label>
25+
<?php
26+
}
27+
?>
28+
</div>
29+
<?php
30+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
if( isset( $data['name'], $_POST[ $data['name'] ] ) ) {
3+
update_option( $data['name'], $_POST[ $data['name'] ] );
4+
}
5+
?>
6+
<textarea
7+
name="<?php echo esc_attr( $data['name'] ?? '' ); ?>"
8+
id="<?php echo esc_attr( $data['name'] ?? '' ); ?>"
9+
><?php echo esc_textarea( stripslashes( get_option( $data['name'] ?? '' ) ) ); ?></textarea>
10+
11+
<style>
12+
<?php echo '.' . esc_attr( $data['name'] ) . '-container'; ?> > .CodeMirror {
13+
height: <?php echo esc_attr( $data['height'] ?? "auto" ); ?>;
14+
}
15+
</style>
16+
17+
<?php
18+
$settings = wp_enqueue_code_editor( array( 'type' => $data['mime_type'] ?? 'text/html' ) );
19+
20+
if ( $settings ) {
21+
wp_add_inline_script(
22+
'code-editor',
23+
sprintf(
24+
'jQuery( function() { wp.codeEditor.initialize( "'. $data['name'] .'", %s ); } );',
25+
wp_json_encode( $settings )
26+
)
27+
);
28+
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
<?php
2+
if( isset( $data['name'], $_POST[ $data['name'] ] ) ) {
3+
update_option( $data['name'], sanitize_text_field( $_POST[ $data['name'] ] ) );
4+
}
5+
wp_enqueue_media();
6+
$is_multiple = isset( $data['multiple'] ) && $data['multiple'] === true ? 'true' : 'false';
7+
$image_preview_template = '<img src="%s" title="%s" class="media-preview-image">';
8+
9+
?>
10+
<div class="plugin-name-media-input-container">
11+
<input
12+
type="hidden"
13+
name="<?php echo esc_attr( $data['name'] ?? '' ); ?>"
14+
id="<?php echo esc_attr( $data['name'] ?? '' ); ?>"
15+
value="<?php echo esc_attr( get_option( $data['name'] ) ); ?>"
16+
>
17+
<div id="<?php echo esc_attr( $data['name'] ?? '' ); ?>_medias-selected" class="plugin-name-medias-selected-container">
18+
<?php
19+
$medias = explode( ',', get_option( $data['name'] ) );
20+
foreach( $medias as $media_id ) {
21+
$media = get_post( $media_id );
22+
if( $media ) {
23+
if( wp_attachment_is_image( $media_id ) ) {
24+
echo sprintf( $image_preview_template, wp_get_attachment_image_url( $media_id, 'thumbnail' ), $media->post_title );
25+
} else {
26+
echo sprintf( $image_preview_template, wp_mime_type_icon( $media->post_mime_type ), $media->post_title );
27+
}
28+
}
29+
}
30+
?>
31+
</div>
32+
<input type="button"
33+
name="<?php echo esc_attr( $data['name'] ?? '' ); ?>_button"
34+
id="<?php echo esc_attr( $data['name'] ?? '' ); ?>_button"
35+
class="button button-secondary"
36+
value="<?php echo esc_attr( $data['button_text'] ?? __( 'Select media', PLUGIN_NAME_TEXT_DOMAIN ) ); ?>"
37+
>
38+
</div>
39+
40+
<script type="text/javascript">
41+
jQuery(document).ready(function($){
42+
const id = '<?php echo esc_attr( $data['name'] ?? '' ); ?>';
43+
const media_template_preview = '<?php echo $image_preview_template; ?>';
44+
jQuery( "#" + id + "_button" ).click(function(e) {
45+
e.preventDefault();
46+
var image = wp.media({
47+
title: '<?php echo esc_attr( $data['button_text'] ?? __( 'Select media', PLUGIN_NAME_TEXT_DOMAIN ) ); ?>',
48+
multiple: <?php echo esc_attr( $is_multiple ); ?>
49+
})
50+
51+
image.on('select', function(e){
52+
console.log(image.state().get('selection').toJSON());
53+
const medias = image.state().get('selection').toJSON();
54+
let selected_medias_preview = '';
55+
let medias_ids = '';
56+
medias.forEach( media => {
57+
medias_ids = medias_ids === '' ? media.id : medias_ids + ',' + media.id;
58+
console.log(medias_ids);
59+
let preview_image = '';
60+
if( media.type === 'image' ) {
61+
preview_image = media.sizes.thumbnail.url;
62+
} else {
63+
preview_image = media.icon;
64+
}
65+
selected_medias_preview += media_template_preview.replace( '%s', preview_image ).replace( '%s', media.title );
66+
});
67+
jQuery( "#" + id + "_medias-selected" ).html( selected_medias_preview );
68+
jQuery( "#" + id ).val( medias_ids );
69+
});
70+
71+
image.on('open', function(e){
72+
console.log(id);
73+
const medias_ids = jQuery( "#" + id ).val();
74+
console.log(medias_ids);
75+
if( medias_ids !== '' ) {
76+
const medias = medias_ids.split(',');
77+
const selection = image.state().get('selection');
78+
medias.forEach( media_id => {
79+
const media = wp.media.attachment( media_id );
80+
media.fetch();
81+
selection.add( media ? [ media ] : [] );
82+
});
83+
}
84+
});
85+
86+
image.open();
87+
88+
});
89+
});
90+
</script>
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
if( isset( $data['name'], $_POST[ $data['name'] ] ) ) {
3+
update_option( $data['name'], sanitize_text_field( $_POST[ $data['name'] ] ) );
4+
}
5+
if(isset($data['options']) && is_array($data['options'])) {
6+
?>
7+
<input type="hidden" name="<?php echo esc_attr( $data['name'] ?? '' ); ?>" value="">
8+
<div class="plugin-name-options">
9+
<?php
10+
foreach( $data['options'] as $option ) {
11+
?>
12+
<label>
13+
<input
14+
type="radio"
15+
name="<?php echo esc_attr( $data['name'] ?? '' ); ?>"
16+
id="<?php echo esc_attr( $data['name'] ?? '' ); ?>"
17+
value="<?php echo esc_attr( $option['value'] ?? '' ); ?>"
18+
<?php checked( $option['value'], get_option( $data['name'] ) ); ?>
19+
>
20+
<?php echo esc_html( $option['label'] ?? '' ); ?>
21+
</label>
22+
<?php
23+
}
24+
?>
25+
</div>
26+
<?php
27+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
if( isset( $data['name'], $_POST[ $data['name'] ] ) ) {
3+
update_option( $data['name'], sanitize_text_field( $_POST[ $data['name'] ] ) );
4+
}
5+
if(isset($data['options']) && is_array($data['options'])) {
6+
?>
7+
<select
8+
name="<?php echo esc_attr( $data['name'] ?? '' ); ?>"
9+
id="<?php echo esc_attr( $data['name'] ?? '' ); ?>"
10+
>
11+
<option value="">
12+
<?php echo esc_html( $data['placeholder'] ?? __( 'Select an option', PLUGIN_NAME_TEXT_DOMAIN ) ); ?>
13+
</option>
14+
<?php
15+
$option_saved = get_option( $data['name'] );
16+
foreach( $data['options'] as $option ) {
17+
?>
18+
<option
19+
value="<?php echo esc_attr( $option['value'] ?? '' ); ?>"
20+
<?php selected( $option['value'], $option_saved ); ?>
21+
>
22+
<?php echo esc_html( $option['label'] ?? '' ); ?>
23+
</option>
24+
<?php
25+
}
26+
?>
27+
</select>
28+
<?php
29+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
if( isset( $data['name'], $_POST[ $data['name'] ] ) ) {
3+
update_option( $data['name'], sanitize_text_field( $_POST[ $data['name'] ] ) );
4+
}
5+
?>
6+
<input
7+
type="<?php echo esc_attr( $data['type'] ); ?>"
8+
name="<?php echo esc_attr( $data['name'] ?? '' ); ?>"
9+
class="regular-text"
10+
id="<?php echo esc_attr( $data['name'] ?? '' ); ?>"
11+
value="<?php echo esc_html( get_option( $data['name'] ) ); ?>"
12+
<?php echo isset( $data['pattern'] ) ? 'pattern="' . esc_attr( $data['pattern'] ) . '"' : ''; ?>
13+
>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
if( isset( $data['name'], $_POST[ $data['name'] ] ) ) {
3+
update_option( $data['name'], sanitize_textarea_field( $_POST[ $data['name'] ] ) );
4+
}
5+
?>
6+
<textarea
7+
name="<?php echo esc_attr( $data['name'] ?? '' ); ?>"
8+
class="regular-text"
9+
id="<?php echo esc_attr( $data['name'] ?? '' ); ?>"
10+
<?php echo isset( $data['pattern'] ) ? 'pattern="' . $data['pattern'] . '"' : ''; ?>
11+
><?php echo esc_html( get_option( $data['name'] ) ); ?></textarea>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
if( isset( $data['name'], $_POST[ $data['name'] ] ) ) {
3+
$value_to_save = $_POST[ $data['name'] ] == '1' ? '1' : '0';
4+
update_option( $data['name'], sanitize_text_field( $_POST[ $data['name'] ] ) );
5+
}
6+
?>
7+
<label class="switch">
8+
<input type="hidden" name="<?php echo esc_attr( $data['name'] ?? '' ); ?>" value="0">
9+
<input
10+
type="checkbox"
11+
name="<?php echo esc_attr( $data['name'] ?? '' ); ?>"
12+
id="<?php echo esc_attr( $data['name'] ?? '' ); ?>"
13+
value="1"
14+
<?php checked( '1', get_option( $data['name'] ) ); ?>
15+
>
16+
<span class="slider round"></span>
17+
</label>

0 commit comments

Comments
 (0)