Thật không may, không có thực hành tốt nhất được chuẩn hóa bởi WordPress để nối vào các mẫu Backbone. Đã có kế hoạch đề xuất đưa API bộ lọc và hành động quen thuộc vào Javascript trong WordPress, nhưng thiếu lực kéo trong phong trào này. Carl Danley đã tạo ra một thư viện thực hiện điều đó , rất hữu ích nếu bạn đang cố gắng xây dựng / jerry-giàn mã theo cách nhanh nhất để tất cả bạn làm những gì bạn đang cố gắng làm.
Về cơ bản, bạn đang cố gắng ghi đè những gì đang diễn ra trong revisions.view.Meta
microtemplate.
Không có cách nào đơn giản để ghi đè lên phần đánh dấu microtemplate. Những gì tôi muốn đề xuất là ghi đè .template()
phương thức của bất kỳ nhà xây dựng nào mở rộng từ revisions.view.Meta
, những người đang revisions.view.MetaFrom
và revisions.view.MetaTo
. Để làm điều này, đây là một số mẫu soạn sẵn:
add_action( 'admin_footer-revision.php', function() {
$post = get_post();
?>
<script id="tmpl-revisions-meta-override" type="text/html">
<# if ( ! _.isUndefined( data.attributes ) ) { #>
<div class="diff-title">
<# if ( 'from' === data.type ) { #>
<strong><?php _ex( 'From:', 'Followed by post revision info' ); ?></strong>
<# } else if ( 'to' === data.type ) { #>
<strong><?php _ex( 'To:', 'Followed by post revision info' ); ?></strong>
<# } #>
<div class="author-card<# if ( data.attributes.autosave ) { #> autosave<# } #>">
{{{ data.attributes.author.avatar }}}
<div class="author-info">
<# if ( data.attributes.autosave ) { #>
<span class="byline"><?php printf( __( 'Autosave by %s' ),
'<span class="author-name">{{ data.attributes.author.name }}</span>' ); ?></span>
<# } else if ( data.attributes.current ) { #>
<span class="byline"><?php printf( __( 'Current Revision by %s' ),
'<span class="author-name">{{ data.attributes.author.name }}</span>' ); ?></span>
<# } else { #>
<span class="byline"><?php printf( __( 'Revision by %s' ),
'<span class="author-name">{{ data.attributes.author.name }}</span>' ); ?></span>
<# } #>
<span class="time-ago">{{ data.attributes.timeAgo }}</span>
<span class="date">({{ data.attributes.dateShort }})</span>
</div>
Your custom text here
<# if ( 'to' === data.type && data.attributes.restoreUrl ) { #>
<input <?php if ( wp_check_post_lock( $post->ID ) ) { ?>
disabled="disabled"
<?php } else { ?>
<# if ( data.attributes.current ) { #>
disabled="disabled"
<# } #>
<?php } ?>
<# if ( data.attributes.autosave ) { #>
type="button" class="restore-revision button button-primary" value="<?php esc_attr_e( 'Restore This Autosave' ); ?>" />
<# } else { #>
type="button" class="restore-revision button button-primary" value="<?php esc_attr_e( 'Restore This Revision' ); ?>" />
<# } #>
<# } #>
</div>
<# if ( 'tooltip' === data.type ) { #>
<div class="revisions-tooltip-arrow"><span></span></div>
<# } #>
<# } #>
</script>
<script>
(function($) {
wp.revisions.view.MetaFrom.prototype.template = wp.template('revisions-meta-override');
wp.revisions.view.MetaTo.prototype.template = wp.template('revisions-meta-override');
})(jQuery);
</script>
<?php
} );
Và để giải thích điều đó. Chúng tôi đang nối vào chân trang của quản trị viên sửa đổi, vì vậy chúng tôi đảm bảo rằng các hàm tạo revisions.view.MetaFrom
và revisions.view.MetaTo
đã được xác định , nhưng trước khi mô đun bootstrapper đã được kích hoạt . Điều này rất quan trọng, vì chúng tôi muốn sửa đổi các hàm tạo trước khi chúng được đưa vào sử dụng. Tôi đã sao chép nội dung của revisions.view.Meta
nguyên văn microtem khắc vào một phiên bản ghi đè của mẫu #tmpl-revisions-meta-override
, nhưng lưu ý rằng tôi đã thêm Your custom text here
vào mẫu trong đó có vẻ như bạn muốn văn bản tùy chỉnh của mình. Sau đó, tôi ghi đè cả template()
phương thức của hàm tạo, sử dụng ID của microtemplate đã sửa đổi làm tham chiếu.
Voila. Bây giờ, nó phụ thuộc vào những gì bạn muốn làm với văn bản tùy chỉnh của bạn. Nếu bạn muốn đặt một số văn bản trong đó, đi cho nó. Nếu bạn muốn xuất văn bản cụ thể cho bản sửa đổi đó, bạn sẽ muốn kiểm tra thư viện đã nói ở trên của Carl Danley và kích hoạt móc lọc đi qua data
để bạn có thể xuất một cái gì đó cụ thể cho dữ liệu trong tay.
Tôi biết, điều này là điên rồ. Nhưng đây là nơi chúng ta đang ghi đè Javascript trong các mẫu xương sống của WordPress. Chúng ta nên có các cuộc thảo luận về cách chúng ta có thể nướng trong khả năng tùy biến như bạn yêu cầu cốt lõi, nhưng chúng ta không phải vì thiếu sự quan tâm / động lực. Hãy thoải mái châm ngòi cuộc trò chuyện tại các cuộc trò chuyện nhà phát triển cốt lõi WordPress hàng tuần của chúng tôi . Tôi sẽ ở đó.