Editar nodos específicos en WP_Admin_Bar

2

¿Es fácilmente editar enlaces en la instancia WP_Admin_Bar global $wp_admin_bar ?

    
pregunta Julian F. Weinert 23.04.2013 - 13:19

2 respuestas

6

Sí Hace poco me encontré con la situación en la que quería cambiar el enlace del perfil en la sección de información del usuario de la barra de administración. El problema es que solo puedes obtener todos los nodos, agregarlos y eliminarlos. Ha notado. Y tampoco puede modificar la propiedad $wp_admin_bar->nodes porque es privada.

Al eliminarlos y agregarlos fácilmente, perderá su orden y todo se verá horrible. Ahora aquí está mi solución:

// void jw_edit_admin_bar ( mixed $id , string $property , string $value )

if(!function_exists('jw_edit_admin_bar')) {
    function jw_edit_admin_bar($id, $property, $value) {
        global $wp_admin_bar;

        if(!is_array($id)) {
            $id = array($id);
        }

        $all_nodes = $wp_admin_bar->get_nodes();

        foreach($all_nodes as $key => $val) {
            $current_node = $all_nodes[$key];
            $wp_admin_bar->remove_node($key);

            if(in_array($key, $id)) {
                $current_node->$property = $value;
            }

            $wp_admin_bar->add_node($current_node);
        }
    }
}

add_action('admin_bar_menu', function() { jw_edit_admin_bar(array('user-info', 'my-account'), 'href', 'http://www.nyan.cat'); });
    
respondido por el Julian F. Weinert 23.04.2013 - 13:19
2

Bien, recientemente me encontré con un problema al intentar crear un saludo personalizado para las vacaciones / hora del día para la barra de herramientas de administración de Wordpress y encontré esta respuesta, lo que me llevó por un camino de horas de tiempo perdido ya que en realidad es completamente innecesario. No es necesario destruir y reconstruir la barra de herramientas de administración para editar un nodo.

La solución simple para el problema de Julien es una adición de 5 líneas a su archivo functions.php que reemplaza la url deseada:

    //-----------------------------------------------------------------------------
/* change location of user profile page in admin toolbar */
add_filter( 'edit_profile_url', 'update_admin_bar_user_profile_url', 10, 3 );
function update_admin_bar_user_profile_url( $url, $user_id, $scheme ) {
    $url = site_url( '/edit-user-profile/' );
    return $url;
}
//-----------------------------------------------------------------------------

Ahora, si desea profundizar un poco en la edición / manipulación de la barra de herramientas de administración, puede hacer algo como esto, que agrega la URL del sitio web del usuario, si ingresaron una en su página de perfil, como un nodo para el Panel de perfil de usuarios (también conocido como enlace en el "submenú"):

    /* --- add the user website link node in the admin toolbar --- */
add_action( 'admin_bar_menu', 'update_admin_bar_user_node', 250 );
function update_admin_bar_user_node( $wp_admin_bar ) {
    $user_id = get_current_user_id();
    $current_user = wp_get_current_user();
    $profile_url = get_edit_profile_url( $user_id );

    if ( ! $user_id )
            return;

    if ( current_user_can( 'read' ) ) {
        $profile_url = get_edit_profile_url( $user_id );
    } elseif ( is_multisite() ) {
        $profile_url = get_dashboard_url( $user_id, 'profile.php' );
    } else {
        $profile_url = false;
    }

    // Add the users website/link to the user-actions sub-menu if they have one 
    $my_account = $wp_admin_bar->get_node( 'my-account' );
    if( ! empty( $current_user->user_url ) && $my_account ){
        $wp_admin_bar->add_node( array(
            'parent'    => 'user-actions',
            'id'        => 'user-url',
            'title'     => '<span class="user-url">' . __( 'My Website' ) . '</span>',
            'href'      => esc_url( $current_user->user_url )
        ) );
    }       
}

Aquí hay una captura de pantalla de cómo se ve ese cambio en el menú "acciones de usuario" de mi cuenta:

    
respondido por el Obewan 10.07.2017 - 18:55

Lea otras preguntas en las etiquetas