¿Cómo agregar un botón a un widget de barra lateral?

8 minutos de lectura

avatar de usuario
salocinx

Soy bastante nuevo en WordPress y quiero agregar un botón personalizado al panel de administración en el buscador de puntos tema. Conozco el concepto de gancho de acción y ya implementé con éxito mi propio gancho de acción con do_action_ref_array() y lo llamó desde el functions.php con add_action().

Enfoque 1 (poner la definición del botón estáticamente en el archivo php)

El widget de la barra lateral de destino en el que quiero agregar un botón adicional está integrado en el archivo ‘dashboard-page.php’. He aquí un extracto del código:

$pfmenu_output .= ($setup11_reviewsystem_check == 1) ? '<li><a href="'.$setup4_membersettings_dashboard_link.$pfmenu_perout.'ua=reviews"><i class="pfadmicon-glyph-377"></i> '. $setup29_dashboard_contents_rev_page_menuname.'</a></li>' : '';
$pfmenu_output .= '<li><a href="http://my.testsite.com/market"><i class="pfadmicon-glyph-476"></i> '. esc_html__('Car Market','pointfindert2d').'</a></li>';
$pfmenu_output .= '<li><a href="'.esc_url(wp_logout_url( home_url() )).'"><i class="pfadmicon-glyph-476"></i> '. esc_html__('Logout','pointfindert2d').'</a></li>';

La segunda línea es mi enfoque estático. El botón se agrega al widget de la barra lateral correctamente. Pero necesito poner este código en el functions.php de mi Child-Theme para conservarlo durante futuros procedimientos de actualización.

Enfoque 2 (más dinámico con un gancho de acción autodefinido)

También traté de agregar mi propio enlace de acción en lugar de agregar el botón estáticamente (reemplacé la segunda línea con una definición de enlace de acción:

$pfmenu_output .= ($setup11_reviewsystem_check == 1) ? '<li><a href="'.$setup4_membersettings_dashboard_link.$pfmenu_perout.'ua=reviews"><i class="pfadmicon-glyph-377"></i> '. $setup29_dashboard_contents_rev_page_menuname.'</a></li>' : '';
do_action_ref_array( 'pf_add_widget_button', array(&$pfmenu_output) );
$pfmenu_output .= '<li><a href="'.esc_url(wp_logout_url( home_url() )).'"><i class="pfadmicon-glyph-476"></i> '. esc_html__('Logout','pointfindert2d').'</a></li>';

Después agregué un add_action() llamar a mi child-theme’s function.php y agregué el botón allí, que también funciona bien:

function swi_add_button_to_widget(&$pfmenu_output) {
    $pfmenu_output .= '<li><a href="http://my.testsite.com/market"><i class="pfadmicon-glyph-476"></i> '. esc_html__('Car Market,'pointfindert2d').'</a></li>';
}
add_action( 'pf_add_widget_button', 'swi_add_button_to_widget' );

Definición del problema

Pero ambos enfoques descritos anteriormente solo funcionarán hasta que actualice el tema de PointFinder por primera vez, ya que dashboard-page.php probablemente será anulado durante la actualización.

No encontré ningún gancho de acción prefabricado implementado por el equipo de desarrollo de temas al buscar en todos los archivos buscando do_action() y do_action_ref_array(). Nada…

Solución ?

Por lo tanto, ¿hay alguna otra forma de acceder a este $pfmenu_output variable desde dentro de mi child-theme para agregar un botón adicional?

¿Estoy completamente atascado cuando los desarrolladores de temas No ¿Incorporar algunos ganchos de acción prefabricados para este propósito específico?

  • ¿Por qué no simplemente editas el archivo dashboard-page.php de tu tema hijo?

    – Sebastián Kaczmarek

    24 de febrero de 2017 a las 9:57

  • No me molesto en mirar los archivos, en la parte delantera y trasera si instala Simply Show Hooks, puede ver todos los ganchos y filtros en su sitio y en su administrador. Luego, puede encontrar uno cercano si no puede encontrar uno específico y usar prioridades para colocarlo arriba o debajo de otra área.

    – Cristina

    25 de febrero de 2017 a las 0:39

  • ¿Por qué está agregando el botón en el tema o el tema secundario? hacer un complemento

    – Cristina

    25 de febrero de 2017 a las 0:42

  • Gracias por los numerosos comentarios. Voy a tratar de entender todas sus ideas. Tomará algún tiempo, pero les responderé a todos ustedes.

    – salocinx

    27 de febrero de 2017 a las 14:49

  • @SebastianKaczmarek: Si copio el dashboard-page.php y su estructura de carpetas a mi tema secundario, no se actualizará si el editor va y cambia/actualiza algo dentro de ese archivo, ¿correcto?

    – salocinx

    27 de febrero de 2017 a las 14:51


avatar de usuario
cueva johnson

Opción 1: Copiar dashboard-page.php al tema de tu hijo

Solo estoy ampliando el comentario de Sebastian. Podrías copiar todo dashboard-page.php archivo (con su enlace de acción agregado) a la carpeta de su tema secundario. Luego, deberá buscar el lugar en el tema principal donde se encuentra el dashboard-page.php El archivo está incluido. Con suerte, está incluido en uno de los temas principales. archivos de plantilla estándar. Luego, simplemente copie ese archivo de plantilla en su tema secundario para anularlo. Entonces tendrías que cambiar esa línea que incluye el dashboard-page.php file para incluir el mismo archivo en la carpeta secundaria.

Por ejemplo, si el page.php archivo de plantilla tiene algo como esto:

include (get_template_directory() . '/dashboard-page.php')

Puedes copiar el page.php archivo a su tema hijo y cambie esa línea a esto:

include (get_stylesheet_directory() . '/dashboard-page.php')

Tenga en cuenta que get_stylesheet_directory() recupera la ruta a la carpeta del tema secundario y get_template_directory() recupera la ruta a la carpeta del tema principal.

Importante: Es posible que el dashboard-page.php El archivo no está incluido en uno de los archivos de plantilla estándar que se pueden anular, sino que está incluido en otros archivos de plantilla no estándar incluidos en el tema principal. En ese caso, tendrá que copiar todos los archivos incluidos hasta el dashboard-page.php expediente. Y asegúrese de que cada include está utilizando la versión del tema secundario de cada archivo.

Opción 2: Usar Javascript/jQuery

Un enfoque alternativo sería usar código javascript para insertar el botón. Puede agregar código javascript a una de sus plantillas de temas secundarios para cambiar dinámicamente el menú después de que se cargue la página. Eché un vistazo a una demostración del tema y parece que el elemento de lista para la barra lateral tiene una clase llamada “pf-sidebar-menu”. Simplemente podría agregar el siguiente código que apunta a esa clase e inserta su botón después del primer elemento de la lista:

jQuery(".pf-sidebar-menu > li:nth-child(1)").after('<li><a href="http://my.testsite.com/market"><i class="pfadmicon-glyph-476"></i>Car Market</a></li>');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul class="pf-sidebar-menu">
    <li><a href="#"><i class="pfadmicon-glyph-377"></i>Something</a></li>
    <li><a href="#"><i class="pfadmicon-glyph-476"></i>Logout</a></li>
</ul>

FYI, una manera fácil de agregar el código anterior a su sitio sería agregar lo siguiente a su tema infantil archivo functions.php. Esto crea una etiqueta de secuencia de comandos en el pie de página de su sitio con el código anterior. Es posible que deba agregar comprobaciones adicionales para orientar una página o páginas específicas.

<?php
function js_add_sidebar_button() {
    ?>
    <script type="text/javascript">
        jQuery(".pf-sidebar-menu > li:nth-child(1)").after('<li><a href="http://my.testsite.com/market"><i class="pfadmicon-glyph-476"></i>Car Market</a></li>');
    </script>
    <?php
}
add_action( 'wp_footer', 'js_add_sidebar_button' );

  • la opción 2 es menos engorrosa.

    –Allen

    27 de febrero de 2017 a las 13:09

  • ¡Muchas gracias hasta ahora! Intentaré implementar sus propuestas e informaré lo antes posible. Una pregunta por adelantado: Su opción 1 no tendrá en cuenta el caso de que el dashboard-page.php podría ser actualizado por el editor, ¿correcto?

    – salocinx

    27 de febrero de 2017 a las 15:08


  • @salocinx Sí, eso es correcto. Es posible que se añadan nuevas características en dashboard-page.php eso no estará disponible en su sitio ya que está utilizando una copia antigua de ese archivo. En ese caso, Allen probablemente tenga razón aquí, la opción 2 es menos engorrosa y menos “destructiva” en caso de futuras actualizaciones.

    – Cueva Johnson

    27 de febrero de 2017 a las 17:23

  • @salocinx Probablemente usé la palabra incorrecta cuando dije destructivo. Quise decir que es más compatible con futuras actualizaciones. No creo que el primer método realmente rompa nada.

    – Cueva Johnson

    27 de febrero de 2017 a las 17:34

  • @KodosJohnson: Eres un genio y realmente leíste mi mente 🙂 Estaba pensando en cómo integrar la llamada jQuery. Sé mucho, desde ensamblador hasta Java, pero el desarrollo web sigue siendo un misterio para mí. ¡Muchos gracias!

    – salocinx

    27 de febrero de 2017 a las 18:29


usar PHP Code Widget enchufar

Widget de código PHP

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad