WordPress, agregue un botón personalizado en la página de lista de tipo de publicación

4 minutos de lectura

Estoy tratando de agregar un botón personalizado en la parte superior de la página de tipo de publicación como esta imagen
ingrese la descripción de la imagen aquí

¿Hay algún filtro o acción que pueda usar para agregar un botón personalizado allí?

Gracias

  • También preguntado aquí, sin respuesta. wordpress.stackexchange.com/questions/163893/…

    – enigma

    23 de abril de 2015 a las 0:36

  • gracias @enigma por agregar eso… han pasado 6 meses y nadie ha respondido todavía…

    – usuario98239820

    23 de abril de 2015 a las 0:42

avatar de usuario
usuario98239820

Encontré una manera de hacerlo, pero no estoy muy contento con este procedimiento. Agregue su respuesta si encuentra una mejor manera. Mientras tanto, esto podría ser de ayuda.

add_action('admin_head-edit.php','addCustomImportButton');

Solo necesito esto en la página de edición, así que estoy usando admin_head-edit.php acción, pero puedes usar admin_head o algún otro (requisito no muy específico)

/**
 * Adds "Import" button on module list page
 */
public function addCustomImportButton()
{
    global $current_screen;

    // Not our post type, exit earlier
    // You can remove this if condition if you don't have any specific post type to restrict to. 
    if ('module' != $current_screen->post_type) {
        return;
    }

    ?>
        <script type="text/javascript">
            jQuery(document).ready( function($)
            {
                jQuery(jQuery(".wrap h2")[0]).append("<a  id='doc_popup' class="add-new-h2">Import</a>");
            });
        </script>
    <?php
}

  • Ya no funciona debido al cambio de HTML. (jQuery agrega elemento en el área invisible)

    – ViliusL

    18 de febrero de 2020 a las 7:35

  • dado que TODAVÍA no hay una mejor alternativa, el JS debe cambiarse a: <script type="text/javascript"> jQuery(function () { jQuery('hr.wp-header-end').before("<a id='doc_popup' class='add-new-h2'>Import</a>"); }); </script>

    – Jan Thomas

    25 de abril de 2020 a las 1:56

Al profundizar en el código central de WordPress, no encontré ningún gancho ni ningún filtro para ese botón. También puede ver ese código desde la línea no. 281 al número de línea 288 . Pero puedes agregar tu botón aquí de acuerdo a esto filtrar.

add_filter('views_edit-post','my_filter');
add_filter('views_edit-page','my_filter');

function my_filter($views){
    $views['import'] = '<a href="#" class="primary">Import</a>';
    return $views;
}

Espero que te ayude.

Si está utilizando la clase WP_Lists_table (y debería), esta es la forma correcta de hacerlo:

add_action('manage_posts_extra_tablenav', 'add_extra_button');
function add_extra_button($where)
{
    global $post_type_object;
    if ($post_type_object->name === 'shop_order') {
        // Do something
    }
}

Lamentablemente, la respuesta aceptada sigue siendo la única que funciona.

Pero como el encabezado del administrador cambió desde que se contestó, la secuencia de comandos correcta ahora debería ser:

jQuery(jQuery(".wrap .page-title-action")[0]).after('<a href="#" class="page-title-action">Import</a>');

Desafortunadamente, no se llama a ningún gancho después de mostrar el botón “Agregar nuevo”. El lugar más cercano posible para agregar cualquier cosa sin usar javascript es abajo el título y “Agregar nuevo” así:

ingrese la descripción de la imagen aquí

En mi ejemplo, agregué un botón a mi tipo de publicación personalizada “Evento” usando el gancho “edit_form_top”:

add_action('edit_form_top', 'add_custom_button');

function add_custom_button($id){
    if ($post->post_type != 'event') return false;
    echo('<button>Custom button</button>');
}

avatar de usuario
pintura de dígitos robin

La respuesta de Touqeer Shafi me llevó en la dirección correcta, necesitaba agregar un botón en la parte superior de mi vista de tabla para un tipo de publicación personalizada (libro), solo tenía que cambiar la parte de la publicación en el views_edit-post para que funcione:

add_action('views_edit-book', function($id) {
      echo('<a href="/post-new.php?post_type=book" class="page-title-action">Another new book</a>');
    });

avatar de usuario
Miguel

Ahora en 2022 con WP 5.9.1, combiné respuestas de Geza Gog y Tameroski, y funciona muy bien:

add_action('edit_form_top', 'my_import_button');
function my_import_button(){
    ?>
    <script type="text/javascript">
        jQuery(document).ready( function($)
        {
            jQuery(jQuery(".wrap .page-title-action")[0]).after('<a href="#" class="page-title-action">Import</a>');
        });
    </script>
    <?php
}

¿Ha sido útil esta solución?