Leider gibt es keine standardisierte Best Practice von WordPress zum Einbinden in Backbone-Vorlagen. Es wurden Pläne vorgeschlagen , die bekannte Filter- und Aktions-API in WordPress auf Javascript zu bringen, aber es gibt einen Mangel an Traktion in dieser Bewegung. Carl Danley hat eine Bibliothek erstellt, die genau das tut. Dies ist hilfreich, wenn Sie versuchen, Code auf die kleinste Art und Weise zu erstellen, damit alle das tun, was Sie tun möchten.
Grundsätzlich versuchen Sie zu überschreiben, was in revisions.view.Meta
der Mikrotemplate vor sich geht.
Es gibt keine einfache Möglichkeit, das Mikrotemplate-Markup selbst zu überschreiben. Was ich vorschlagen würde, ist das Überschreiben der .template()
Methode eines Konstruktors, der sich von revisions.view.Meta
, dem Sein revisions.view.MetaFrom
und revisions.view.MetaTo
. Um dies zu tun, hier ein paar Boilerplate:
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
} );
Und um das zu erklären. Wir schließen uns der Fußzeile der Revisionsadministrationsseite an, sodass wir sicher sind, dass die Konstruktoren revisions.view.MetaFrom
und revisions.view.MetaTo
definiert wurden , jedoch bevor der Bootstrapper des Revisionsmoduls ausgelöst wurde . Dies ist wichtig, da wir die Konstruktoren ändern möchten, bevor sie verwendet werden. Ich habe den Inhalt der revisions.view.Meta
Mikrotemplate wörtlich in eine überschriebene Version der Vorlage kopiert #tmpl-revisions-meta-override
, aber ich habe Your custom text here
in der Vorlage hinzugefügt, dass es so aussieht, als ob Sie Ihren benutzerdefinierten Text möchten. Dann überschreibe ich die template()
Methode beider Konstruktoren und verwende die ID der modifizierten Mikrotemplate als Referenz.
Voila. Nun kommt es darauf an, was Sie mit Ihrem benutzerdefinierten Text tun möchten. Wenn Sie dort Text einfügen möchten, versuchen Sie es. Wenn Sie für diese Revision spezifischen Text ausgeben möchten, sollten Sie die oben genannte Bibliothek von Carl Danley überprüfen und einen Filter-Hook auslösen data
, damit Sie etwas Spezifisches für die vorliegenden Daten ausgeben können.
Ich weiß, das ist verrückt. Aber hier sind wir mit dem Überschreiben von Javascript in WordPress Backbone-Vorlagen. Wir sollten darüber diskutieren, wie wir die Anpassbarkeit, wie Sie sie wünschen, in den Kern einbinden können, aber wir sind nicht, weil es an Interesse / Dynamik mangelt. Fühlen Sie sich frei, bei unseren wöchentlichen WordPress-Kernentwickler-Chats Gespräche zu führen . Ich werde da sein.