• ResueltoModerador almendron

    (@almendron)


    Lo que pretendo es insertar un área de widgets con un shortcode dentro de una página. He encontrado un plugin, pero me gustaría hacerlo con código ya que solo necesito insertar un widget en concreto dentro de ese área.

    Necesito, por tanto, insertar una área de widgets concreta en una página.

    Nota: el área a insertar ya está creada y disponible. Código utilizado:

    hybrid_register_sidebar( array(
      'id' => 'shortcode-widget',
      'name' => __( 'Shortcode Widget', 'stargazer' ),
      'description' => __( 'Widget para shortcode', 'stargazer' ),
    ) );
    • Este debate fue modificado hace 5 años, 2 meses por almendron.
Viendo 7 respuestas - de la 1 a la 7 (de un total de 7)
  • Moderador LGrusin

    (@lgrusin)

    Supongo que quieres crear un nuevo sidebar y que únicamente lo use una página con el widget que le hayas puesto.

    Habría que saber cómo están creados los sidebar en el tema y añadir otro con register_sidebars

    • Esta respuesta fue modificada hace 5 años, 2 meses por LGrusin.
    Moderador almendron

    (@almendron)

    No exactamente, @lgrusin

    El sidebar ya está registrado con el código que he puesto. De hecho, si voy a Apariencia > Widgets ya me sale.

    Ahora lo que quiero es añadir ese sidebar DENTRO DE UNA PÁGINA mediante un shortcode.

    Mira esto, creo que es lo que estas buscando.
    Sidebar-Shortcode

    Moderador kallookoo

    (@kallookoo)

    Hola,

    Lo que se me ocurre.

    Primero crea un shortcode, simple o con attrs eso ya lo decides tu.
    En su codigo llamas a get_sidebar especificando el nombre de la sidebar o usas locate_template o directamente llamas a dynamic_sidebar.
    Sea como sea deberas usas ob_start() para pasar el contenido por variable.
    Ejemplo basico:

    
    function sidebar_shortcode( $atts, $content = null ) {
    	ob_start();
    	get_sidebar( 'especial' );
    	return ob_get_clean();
    }
    add_shortcode( 'sidebar', 'sidebar_shortcode' );
    

    Upps, se me adelanto el compañero @rolozco que dice lo mismo.

    • Esta respuesta fue modificada hace 5 años, 2 meses por kallookoo. Razón: Upps, texto
    Moderador almendron

    (@almendron)

    @rolozco : la idea expresada en el código al que me remites ya lo tenía. Este en concreto, y dejando al margen que contiene algún que otro error de sintaxis, tampoco funciona. El problema es usar «get_sidebar».

    Al final lo he conseguido pero usando «dynamic_sidebar».

    Con todo ello puedo poner una página sin un sidebar estricto. El que se inserta mediante el shortcode permite que el texto fluya por debajo del sidebar.

    En los próximos días pondré la solución completa.

    Y gracias por vuestra ayuda.

    Moderador almendron

    (@almendron)

    @kallookoo : gracias a ti tambien (que no había visto tu respuesta).

    Y por supuesto a @lgrusin que siempre está atento a echar una mano.

    Moderador almendron

    (@almendron)

    El código que funciona es el siguiente:

    1) Para widgets:

    function show_custom_widget( $atts, $content = null ) {
    extract(shortcode_atts(array('name' => ''), $atts));
    ob_start();
    the_widget( $name );
    $content = ob_get_clean();
    return $content;
    }
    add_shortcode( 'widget-fluido', 'show_custom_widget' );

    y El shortocode es [widget-fluido name=WP_Widget_Archives]. Tenemos que indicar el nombre de clase PHP del widget (The widget’s PHP class name)

    2) Para área de widgets (sidebar):

    function sidebar_shortcode( $atts, $content = null ) {
    	extract(shortcode_atts(array('id' => ''), $atts));
    	ob_start();
    	dynamic_sidebar( $id );
    	$content = ob_get_clean();
    	return $content;
    }
    add_shortcode('sidebar-fluido', 'sidebar_shortcode');

    y el shortcode es [sidebar-fluido id=ID_SIDEBAR]

    Lo he desarrollado y explicado de forma más extensa en https://www.almendron.com/blog/insertar-widgets-o-area-de-widgets-barra-lateral-en-una-pagina-utilizando-un-shortcode/

Viendo 7 respuestas - de la 1 a la 7 (de un total de 7)
  • El debate ‘Mostrar área de widgets en una página’ está cerrado a nuevas respuestas.