<?php // Output this at the top of the post-edit screen just below the title input. add_action( 'edit_form_after_title', function() { // Hook in our template script tag to the footer. add_action( 'admin_footer', 'zao_item_status_tmpl' ); // Hook in our custom JS for updating the status. add_action( 'admin_footer', 'zao_item_status_js' ); // Now, enqueue the WP util script so we can use wp.template wp_enqueue_script( 'wp-util' ); // Make the initial output have a yellow status square ?> <span class="zao-status"><span style="display: inline-block;background-color:#ffe24d;width:10px; height:10px;"></span> Please wait...</span> <?php } ); function zao_item_status_tmpl() { ?> <script type="text/html" id="tmpl-zao-item-status"> <span class="zao-status" data-id="{{ data.id }}"> <# if ( data.status.name ) { #> <div class="zao-item-status"> <span class="zao-status-color" style="display: inline-block;background-color:{{ data.status.color }};width:10px; height:10px;"></span> {{{ data.open }}} {{ data.status.name }} {{{ data.close }}} </div> <# } else { #> — <# } #> </span> </script> <?php } function zao_item_status_js() { ?> <script type="text/javascript"> // Wait for the dom to be ready.. jQuery( function( $ ) { // Get the template function corresponding to our template markup. var template = wp.template( 'zao-item-status' ); // uses script tag ID minus "tmpl-" // Let's wait a tick, so we can see it go from yellow to green. setTimeout( function() { // Let's fake some data (maybe this is data from an API request?) var tmplData = { id: 1, status: { name: 'Success!', color: 'green' }, open: '<span class="status-name" style="color:green">', close: '</span>' }; // Send the data to our new template function, get the HTML markup back. var html = template( tmplData ); // Now let's replace the contents of the existing markup with our updated template markup. $( '.zao-status' ).html( html ); }, 1000 ); }); </script> <?php }