私はどうにかして画像のカスタムオプション選択を追加することができました
function attachment_field_credit( $form_fields, $post ) {
$field_value = get_post_meta( $post->ID, 'first_image', true );
$isSelected1 = $field_value == '1' ? 'selected ' : '';
$isSelected2 = $field_value != '1' ? 'selected ' : '';
$form_fields['first_image'] = array(
'label' => __( 'Use as first image' ),
'input' => 'html',
'html' => "<select name='attachments[{$post->ID}][first_image]' id='attachments[{$post->ID}][first_image]'>
<option ".$isSelected1." value='1'>Yes</option>
<option ".$isSelected2." value='2'>No</option>
</select>"
);
return $form_fields;
}
add_filter( 'attachment_fields_to_edit', 'attachment_field_credit', 10, 2 );
今私はリンクのためにほとんど同じことをする必要があります。だから私はPages -> Add New -> Insert / Edit Link
をクリックすれば私はこれを得る:
それらのリンクに別のオプション選択フィールドを追加できますか?どうやってするか?
ダイアログHTMLはWP_Editors::wp_link_dialog()
から来ていますが、そこにフックはありません。
代わりにjQueryを使用してカスタムHTMLをリンクダイアログに追加し、上書きすることを試みることができます。 wpLink.getAttrs()
、とても短いので;-)
デモの例:
jQuery( document ).ready( function( $ ) {
$('#link-options').append(
'<div>
<label><span>Link Class</span>
<select name="wpse-link-class" id="wpse_link_class">
<option value="normal">normal</option>
<option value="lightbox">lightbox</option>
</select>
</label>
</div>' );
wpLink.getAttrs = function() {
wpLink.correctURL();
return {
class: $( '#wpse_link_class' ).val(),
href: $.trim( $( '#wp-link-url' ).val() ),
target: $( '#wp-link-target' ).prop( 'checked' ) ? '_blank' : ''
};
}
});
簡単なテストをしただけでうまくいくようですが、リンクを更新するときにはさらにテストと調整が必要です。 これは古いハックです 私がやったことはリフレッシュが必要かもしれません。
リンクダイアログにrel="nofollow"
オプションを追加したいようですので、その場合は上記のアプローチを更新しましょう。
rel
リンク属性を追加します。
/**
* Modify link attributes
*/
wpLink.getAttrs = function() {
wpLink.correctURL();
return {
rel: $( '#wpse-rel-no-follow' ).prop( 'checked' ) ? 'nofollow' : '',
href: $.trim( $( '#wp-link-url' ).val() ),
target: $( '#wp-link-target' ).prop( 'checked' ) ? '_blank' : ''
};
}
rel
属性が空の場合は、エディタのリンクから自動的に削除されます。
その後、リンクダイアログが開いたときに発生するwplink-open
イベントにフックできます。ここでカスタムHTMLをインジェクトし、現在のリンク選択に従って更新することができます。
$(document).on( 'wplink-open', function( wrap ) {
// Custom HTML added to the link dialog
if( $('#wpse-rel-no-follow').length < 1 )
$('#link-options').append( '<div> <label><span></span> <input type="checkbox" id="wpse-rel-no-follow"/> No Follow Link</label></div>');
// Get the current link selection:
var _node = wpse_getLink();
if( _node ) {
// Fetch the rel attribute
var _rel = $( _node ).attr( 'rel' );
// Update the checkbox
$('#wpse-rel-no-follow').prop( 'checked', 'nofollow' === _rel );
}
});
選択したリンクのHTMLを取得するために、getLink()
コア関数に基づいて次のようなヘルパー関数を使用します。
function wpse_getLink() {
var _ed = window.tinymce.get( window.wpActiveEditor );
if ( _ed && ! _ed.isHidden() ) {
return _ed.dom.getParent( _ed.selection.getNode(), 'a[href]' );
}
return null;
}
これが出力です。
次のHTMLで
ps:これはさらにテストされる可能性があり、また翻訳をサポートするために拡張されるかもしれません
コアを見ると、wp_link_dialog
関数にはフィルターやアクションの痕跡はありません。
他の人がこの問題をどのように解決したかを調べると、 プラグインがあります これはあなたが望むものとほぼ同じです。基本的にはwplink.js wp_deregister_script('wplink');
の登録を解除し、ファイルの修正版を再度登録します。今回は必要な追加フィールドを含みます。
私はこれが最善の方法だとは思いませんが(WordPressを更新している間に起こり得るその後の衝突を考慮に入れて)、それを手に入れるのが最も簡単な方法だと思います。
それが役に立てば幸い!