How to Make ISRC Number and Audio Player URL Custom Fields Visible in the Post List and Editable via Quick Edit

summertime flag C6q6cjlASnI unsplash scaled Plugins
This article can be read in about 8 minutes.

By adding the following code, you can achieve this functionality.

// PART 1: Display columns
// Add custom columns for ISRC and Audio Player URL
function add_acf_custom_columns($columns) {
    $columns['isrc_number'] = __('ISRC Number');
    $columns['audio_player_url'] = __('Audio Player URL');
    return $columns;
}
add_filter('manage_post_posts_columns', 'add_acf_custom_columns');

// Populate the columns with ACF field data
function display_acf_custom_columns($column, $post_id) {
    switch ($column) {
        case 'isrc_number':
            echo get_field('isrc_number', $post_id);
            break;
        case 'audio_player_url':
            $url = get_field('audio_player_url', $post_id);
            if ($url) {
                echo '<a href="' . esc_url($url) . '" target="_blank">' . esc_url($url) . '</a>';
            }
            break;
    }
}
add_action('manage_posts_custom_column', 'display_acf_custom_columns', 10, 2);

// Make columns sortable
function make_acf_columns_sortable($columns) {
    $columns['isrc_number'] = 'isrc_number';
    return $columns;
}
add_filter('manage_edit-post_sortable_columns', 'make_acf_columns_sortable');

// PART 2: Quick Edit functionality
// Add quick edit fields
function add_quick_edit_custom_box($column_name, $post_type) {
    if ($post_type !== 'post') return;
    
    switch($column_name) {
        case 'isrc_number':
            ?>
            <fieldset class="inline-edit-col-right">
                <div class="inline-edit-col">
                    <label>
                        <span class="title">ISRC</span>
                        <span class="input-text-wrap">
                            <input type="text" name="isrc_number" class="isrc_number">
                        </span>
                    </label>
                </div>
            </fieldset>
            <?php
            break;
        case 'audio_player_url':
            ?>
            <fieldset class="inline-edit-col-right">
                <div class="inline-edit-col">
                    <label>
                        <span class="title">Audio URL</span>
                        <span class="input-text-wrap">
                            <input type="url" name="audio_player_url" class="audio_player_url">
                        </span>
                    </label>
                </div>
            </fieldset>
            <?php
            break;
    }
}
add_action('quick_edit_custom_box', 'add_quick_edit_custom_box', 10, 2);

// Save quick edit data
function save_quick_edit_data($post_id) {
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
    
    if (isset($_POST['isrc_number'])) {
        update_field('isrc_number', $_POST['isrc_number'], $post_id);
    }
    if (isset($_POST['audio_player_url'])) {
        update_field('audio_player_url', $_POST['audio_player_url'], $post_id);
    }
}
add_action('save_post', 'save_quick_edit_data');

// Populate quick edit fields with existing values
function add_quick_edit_javascript() {
    ?>
    <script type="text/javascript">
    jQuery(document).ready(function($) {
        var wp_inline_edit = inlineEditPost.edit;
        inlineEditPost.edit = function(id) {
            wp_inline_edit.apply(this, arguments);
            var post_id = 0;
            if (typeof(id) == 'object') {
                post_id = parseInt(this.getId(id));
            }
            
            if (post_id > 0) {
                var row = $('#post-' + post_id);
                var isrc = $('.isrc_number', row).text();
                var audio_url = $('.audio_player_url', row).text();
                
                $('#edit-' + post_id + ' input[name="isrc_number"]').val(isrc);
                $('#edit-' + post_id + ' input[name="audio_player_url"]').val(audio_url);
            }
        };
    });
    </script>
    <?php
}
add_action('admin_footer', 'add_quick_edit_javascript');

It is also possible to display this using the Meta Fields Block plugin even in block-based themes.

However, pulling the value of Advanced Custom Fields (ACF) into a Download button was not achievable in this setup. While it could be done by customizing the PHP code, implementing it within the constraints of a block-based theme seems to lack some necessary methods or approaches.

Comment

Donate with Cryptocurrency!

Copied title and URL