私はすでに解決策を探していて、未解決または時代遅れのトピックをたくさん見つけました。
カスタムワードプレスギャラリーオプション | デフォルトギャラリーのカスタムフィールド
ただし、ギャラリーのショートカットに属性を追加するためのカスタムフィールド(チェックボックス、サイクルボタンなど)を追加したいと思います。誰かがいくつかの断片を持っていますか?
編集:最後に私はこれを見つけました https://wordpress.org/support/topic/how-to-add-fields-to-gallery-settings そしてそれをやりたいことすべて。 :)
編集:上のリンクに基づいて、私は次の行を書いた。
add_action('print_media_templates', function(){
?>
<script type="text/html" id="tmpl-custom-gallery-setting">
<h3 style="z-index: -1;">___________________________________________________________________________________________</h3>
<h3>Custom Settings</h3>
<label class="setting">
<span><?php _e('Text'); ?></span>
<input type="text" value="" data-setting="ds_text" style="float:left;">
</label>
<label class="setting">
<span><?php _e('Textarea'); ?></span>
<textarea value="" data-setting="ds_textarea" style="float:left;"></textarea>
</label>
<label class="setting">
<span><?php _e('Number'); ?></span>
<input type="number" value="" data-setting="ds_number" style="float:left;" min="1" max="9">
</label>
<label class="setting">
<span><?php _e('Select'); ?></span>
<select data-setting="ds_select">
<option value="option1"> 'Option-1' </option>
<option value="option2"> 'Option-2' </option>
</select>
</label>
<label class="setting">
<span><?php _e('Bool'); ?></span>
<input type="checkbox" data-setting="ds_bool">
</label>
</script>
<script>
jQuery(document).ready(function()
{
_.extend(wp.media.gallery.defaults, {
ds_text: 'no text',
ds_textarea: 'no more text',
ds_number: "3",
ds_select: 'option1',
ds_bool: false,
ds_text1: 'dummdideldei'
});
wp.media.view.Settings.Gallery = wp.media.view.Settings.Gallery.extend({
template: function(view){
return wp.media.template('gallery-settings')(view)
+ wp.media.template('custom-gallery-setting')(view);
}
});
});
</script>
<?php
});
ユーザーインターフェース ショートコード
Everthingsは、横にうまく動作します。番号フィールドは、ショートコードで埋められていません。その理由は、HTML入力タグタイプの "number"は、 "value"には整数しか受け入れられないからだと思います。 ds_numberの文字列をintに変更するためにコードに何を追加する必要がありますか?
ご挨拶
あなたのコードをありがとう。私はこの問題をさらに調査しました(これは整数フォーマットの問題ではありません)。私が数字フィールドに対して思いついた唯一の解決策は、もっとWP JSをモンキーパッチすることです。これは、あらゆる入力タイプをサポートする変更を加えたコード全体です。
add_action('print_media_templates', function(){
?>
<script type="text/html" id="tmpl-custom-gallery-setting">
<h3>Custom Settings</h3>
<label class="setting">
<span><?php _e('Text'); ?></span>
<input type="text" value="" data-setting="ds_text" style="float:left;">
</label>
<label class="setting">
<span><?php _e('Textarea'); ?></span>
<textarea value="" data-setting="ds_textarea" style="float:left;"></textarea>
</label>
<label class="setting">
<span><?php _e('Number'); ?></span>
<input type="number" value="" data-setting="ds_number" style="float:left;" min="1" max="9">
</label>
<label class="setting">
<span><?php _e('Select'); ?></span>
<select data-setting="ds_select">
<option value="option1"> 'Option-1' </option>
<option value="option2"> 'Option-2' </option>
</select>
</label>
<label class="setting">
<span><?php _e('Bool'); ?></span>
<input type="checkbox" data-setting="ds_bool">
</label>
</script>
<script>
jQuery(document).ready(function()
{
_.extend(wp.media.gallery.defaults, {
ds_text: 'no text',
ds_textarea: 'no more text',
ds_number: "3",
ds_select: 'option1',
ds_bool: false,
ds_text1: 'dummdideldei'
});
wp.media.view.Settings.Gallery = wp.media.view.Settings.Gallery.extend({
template: function(view){
return wp.media.template('gallery-settings')(view)
+ wp.media.template('custom-gallery-setting')(view);
},
// this is function copies from WP core /wp-includes/js/media-views.js?ver=4.6.1
update: function( key ) {
var value = this.model.get( key ),
$setting = this.$('[data-setting="' + key + '"]'),
$buttons, $value;
// Bail if we didn't find a matching setting.
if ( ! $setting.length ) {
return;
}
// Attempt to determine how the setting is rendered and update
// the selected value.
// Handle dropdowns.
if ( $setting.is('select') ) {
$value = $setting.find('[value="' + value + '"]');
if ( $value.length ) {
$setting.find('option').prop( 'selected', false );
$value.prop( 'selected', true );
} else {
// If we can't find the desired value, record what *is* selected.
this.model.set( key, $setting.find(':selected').val() );
}
// Handle button groups.
} else if ( $setting.hasClass('button-group') ) {
$buttons = $setting.find('button').removeClass('active');
$buttons.filter( '[value="' + value + '"]' ).addClass('active');
// Handle text inputs and textareas.
} else if ( $setting.is('input[type="text"], textarea') ) {
if ( ! $setting.is(':focus') ) {
$setting.val( value );
}
// Handle checkboxes.
} else if ( $setting.is('input[type="checkbox"]') ) {
$setting.prop( 'checked', !! value && 'false' !== value );
}
// HERE the only modification I made
else {
$setting.val( value ); // treat any other input type same as text inputs
}
// end of that modification
},
});
});
</script>
<?php