¿Cómo le haré una barra lateral vía add_action?

En uno de mis plantillas tengo una acción gancho 'do_xyz' quiero adjuntar una barra personalizada para el gancho de acción do_xyz aquí es lo que estoy haciendo en mi archivo functions.php tema, no funciona:
add_action('do_xyz', 'get_sidebar('secondary')' );
¿Cuál es la forma correcta de hacer esto? Sé que mis ganchos son configuración porque si atribuyo una función personalizada construido allí, entonces funciona. No puedo sujetar la barra lateral de la manera que estoy tratando. Tengo esto en mi archivo de funciones de edición: function do_xzy() {do_action('do_xyz')}; Entonces tengo en mi plantilla de sí mismo:
do_action( 'do_xyz' );
Entiendo completamente registrando un gancho de acción en mi tema y también añadir un lugar para la acción que se produzca.

Entiendo algo add_action, es simplemente no le guste cuando puse el get_sidebar('secondary') allí como mi función que quiero conectar a mi gancho de acción. Espero que tenga más sentido..



Solución 1

Explicación

Hay la matriz global
$wp_filters
. Este array almacena algunos arreglos sub. Uno para cada uno
priority
.

Cada array sub entonces contiene una matriz para cada \
init
gancho):
echo '<pre>';
    var_dump( $GLOBALS['wp_filter']['the_content'] );
echo '</pre>';
… y luego se verá lo siguiente escupe (reducido para la respuesta):
array
  11 => 
    array
      'capital_P_dangit' => 
        array
          'function' => string 'capital_P_dangit' (length=16)
          'accepted_args' => int 1
      'do_shortcode' => 
        array
          'function' => string 'do_shortcode' (length=12)
          'accepted_args' => int 1
  10 => 
    array
      'wptexturize' => 
        array
          'function' => string 'wptexturize' (length=11)
          'accepted_args' => int 1
      'convert_smilies' => 
        array
          'function' => string 'convert_smilies' (length=15)
          'accepted_args' => int 1
      'convert_chars' => 
        array
          'function' => string 'convert_chars' (length=13)
          'accepted_args' => int 1
      'wpautop' => 
        array
          'function' => string 'wpautop' (length=7)
          'accepted_args' => int 1
      'shortcode_unautop' => 
        array
          'function' => string 'shortcode_unautop' (length=17)
          'accepted_args' => int 1
      'prepend_attachment' => 
        array
          'function' => string 'prepend_attachment' (length=18)
          'accepted_args' => int 1
  8 => 
    array
      '000000002657b7190000000078ed2c6erun_shortcode' => 
        array
          'function' => 
            array
              ...
          'accepted_args' => int 1
      '000000002657b7190000000078ed2c6eautoembed' => 
        array
          'function' => 
            array
              ...
          'accepted_args' => int 1
Caso de uso si estás añadiendo la siguiente llamada a una plantilla:
do_action( 'hook_name' );
… después de cada función de callback, que conecta a gancho, se guardarán dentro de la matriz global.
// WPSE QuestionNr. 

Callback Function function wpse59779_cb_fn() { return print 'I am now added to the template!'; } add_action( 'hook_name', 'wpse59779_cb_fn' );
Esto significa que tenemos el siguiente resultado de la
var_dump
(de la
'hook_name'
):

array
  10 => 
    array
      'wpse59779_cb_fn' => 
        array
          'function' => string 'wpse59779_cb_fn' (length=15)
          'accepted_args' => int 1
          ...etc...
¿Qué pasa? Si añades una
string
Via
add_action
a un gancho, entonces usted está básicamente agregando datos a una
global
matriz. El
do_action( 'hook_name' );
Entonces sólo busca una función en el espacio de nombres global (en este caso) y ejecuta la función.

El problema

Intentas hacer un montón de cosas sin saber en realidad los conceptos básicos de PHP.

Algunas notas aquí, pero el resto será de ti y de php.net:
add_action( 'do_xyz', 'get_sidebar('secondary')' );
Esto dejará un fracaso, como estás terminando la cadena dentro de la llamada después de la segunda
'
, Así
secondary
soportes para sí mismo y voluntad consideran quizás un descanso constante o simplemente, como no has usado un
.
o
,
conectarse en realidad las cosas.

Cómo hacerlo

Si desea agregar barras laterales (o cualquier otro elemento) a un gancho, entonces simplemente añadir una función callback que envuelve su etiqueta de plantilla
function wpse59779_get_sidebars()
{
    return get_sidebar( 'secondary' );
}
add_action( 'do_xyz', 'wpse59779_get_sidebars' );

Avanzado

Ganchos pueden tener argumentos, así que también puede utilizar un valor predeterminado:
do_action( 'do_xyz', 'secondary' ); 
Entonces puede utilizar o modificar el valor por defecto con condicionales por ejemplo
function wpse59779_get_sidebars( $sidebar_name )
{
    return get_sidebar( $sidebar_name );
}
add_action( 'do_xyz', 'wpse59779_get_sidebars' );
El ejemplo con un condicional:
function wpse59779_get_sidebars( $sidebar_name )
{
    if ( is_page() )
    {
        $sidebar_name = 'page_sidebar';
    }
    elseif ( is_post() )
    {
        $sidebar_name = 'single_post_sidebar';
    }
    return get_sidebar( $sidebar_name );
}
add_action( 'do_xyz', 'wpse59779_get_sidebars' );

Aún más avanzado

Ganchos pueden tomar más de un argumento:
do_action( 'do_xyz', 'secondary', 'FFF' ); 
El ejemplo con dos argumentos:
function wpse59779_get_sidebars( $sidebar_name, $color )
{
    echo "<div style='background-color: #{$color};'>Hello!</div>";

    if ( is_page() )
    {
        $sidebar_name = 'page_sidebar';
    }
    elseif ( is_post() )
    {
        $sidebar_name = 'single_post_sidebar';
    }
    return get_sidebar( $sidebar_name );
}
add_action( 'do_xyz', 'wpse59779_get_sidebars', 10, 2 );
Note, que ahora tenemos dos valores más para el
add_action
llamar: la primera es la
priority
(por defecto 10) ejecutar la función dentro del gancho y el segundo es el número de argumentos. Esos son sólo es necesario si el número de argumentos es mayor que uno.

Espero que eso ayuda a despejar las cosas..

Solución 2

get_sidebar( 'secondary' );
cargará el archivo de plantilla
sidebar-secondary.php
.

Lo que estás buscando es la dynamic_sidebar() función. Deberás también registrar tu sidebar primer uso register_sidebar().

Así que tienes dos opciones. 1) Sólo colocar la barra lateral en el archivo de plantilla.

Ponerlo directamente encima o debajo de la
dynamic_sidebar()
llamada, cualquiera que tenga sentido:
register_sidebar()
2) Use el gancho.
do_action()
do_action()
.





Problemas relacionados

crear una barra lateral izquierda en prensa palabra

Barra lateral no se actualizó.

ReadWriteWeb como desplazamiento lateral

Obtiene el número de widgets en la barra lateral

Mostrar barra lateral específico para cada rol

Sidebar dinámico basado en categoría

Barras laterales dinámicas basan en nombre de la página

Imagen al azar de tipo etiqueta personalizada en barra lateral

¿Cómo puedo ocultar la barra lateral de un post específico?

¿Acceso directo a la edición de widget\/barra lateral en el menú admin?

¿Woocommerce información del producto en una barra lateral?

¿Cómo visualizar un campo personalizado en la barra lateral de todas mis páginas?

Source: Stack Exchange Inc; License: cc by-sa 3.0 Contacto / Contact