¿Cómo añadir Widget en post de Wordpress?

Ramnsés Rojas Seguir

Épsilon
Verificación en dos pasos activada
Desde
17 Mar 2011
Mensajes
817
Buenas Tarde Betas...

Quiero colocar un Widget en un post de Wordpress... Como puedo hacerlo?
He buscado aqui en el Foro y en Google y no he logrado dar con nada.

En dado caso que eso no se pueda, como puedo previsualizar los Widget que estan al lado del logo de mi otra web mediante Iframe?

Saludos,
 

Denarius

Gamma
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
22 Feb 2012
Mensajes
403
Hola,

Sí que se puede (yo lo he hecho) y, para ello, puedes hacerlo mediante un plugin o, colocante un código en el archivo functions.php de tu plantilla. Cada widget generará un 'shortcode' que podrás colocar allí donde quieras...

Si me das un ratito, te lo busco (salvo que alguien sea más rápido y te lo pueda proporcionar antes:drunk:)

Saludos

Buenas Tarde Betas...

Quiero colocar un Widget en un post de Wordpress... Como puedo hacerlo?
He buscado aqui en el Foro y en Google y no he logrado dar con nada.

En dado caso que eso no se pueda, como puedo previsualizar los Widget que estan al lado del logo de mi otra web mediante Iframe?

Saludos,
 
Última edición:

Ramnsés Rojas

Épsilon
Verificación en dos pasos activada
Desde
17 Mar 2011
Mensajes
817
Hola,

Sí que se puede (yo lo he hecho) y, para ello, puedes hacerlo mediante un plugin o, colocante un código en el archivo functions.php de tu plantilla. Cada widget generará un 'shortcode' que podrás colocar allí donde quieras...

Si me das un ratito, te lo busco (salvo que alguien sea más rápido y te lo pueda proporcionar antes:drunk:)

Saludos

Espero por ti... Ya he instalado el plugin que has marcado! :welcoming:
 

Denarius

Gamma
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
22 Feb 2012
Mensajes
403
Éste es el código que debes colocar en el functions.php de tu plantilla:

PHP:
add_action('widgets_init', 'create_arbitrary_sidebar');
function create_arbitrary_sidebar(){
  register_sidebar(array(
    'name' => __('Arbitrary Widgets'),
    'id' => 'arbitrary',
    'description' => sprintf(__('Widgets from this area can added into posts/pages using the %1$s or %2$s shortcodes.'), '[widget ID]', '[widget Name]'),
    'before_widget' => '<div class="block"><div class="block-content block-%2$s clear-block" id="instance-%1$s">',
    'after_widget' => '</div></div>',
    'before_title' => '<h3 class="title">',
    'after_title' => '</h3>'
   ));
}

add_action('in_widget_form', 'widget_shortcodes_info', 10, 3);
function widget_shortcodes_info($widget, $return, $instance){
  if(!is_numeric($widget->number)) return; // wp-save bug :( widget needs to be saved first...

  global $wp_registered_widgets;

  // get the active widgets from all sidebars
  $sidebars_widgets = wp_get_sidebars_widgets();

  // prepare matches
  $matches = array();
  foreach($wp_registered_widgets as $i => $w)
    if($w['name'] == $widget->name) $matches[] = $w['id'];

  // find out the widget position (number)
  $number = 0;
  $is_arbitrary = false;
  if(!empty($sidebars_widgets['arbitrary']))
    foreach($sidebars_widgets['arbitrary'] as $i => $value):
      if(in_array($value, $matches) && !$is_arbitrary) $number = $number +1;
      if($value == $widget->id) $is_arbitrary = true;
    endforeach;

  echo '<div style="background:#eee; padding: 5px;">To include this widget into your posts or pages use one of the following shortcodes: <br />';
  echo '<code>[widget '.substr(md5($widget->id), 0, 8).']</code> <br /> <code>[widget "'.$widget->name.'"'.(($number > 1) ? ' number='.$number : null).']</code></div>';
}

add_shortcode('widget', 'shortcode_widget');
function shortcode_widget($atts){
  global $wp_registered_widgets, $wp_registered_sidebars;
  extract(shortcode_atts(array(
    'number' => false,        // only taken in consideration if the 1st argument is the "Widget Name" (not the hashed ID)
    'title' => true,          // show titles?
    'area' => 'arbitrary'     // sidebar to search
  ), $atts));

  // get 1st parameter (assuming this is the target widget id or name)
  if (!empty($atts[0])) $widget = esc_attr($atts[0]); else return;

  $sidebar = esc_attr($area);
  $number = intval($number);

  $callback = false;
  $possible_matches = array();
  $sidebars_widgets = wp_get_sidebars_widgets();
  if((empty($sidebars_widgets[$sidebar]) || empty($wp_registered_widgets)) && (current_user_can('edit_themes')))
    return "no valid active widgets in {$sidebar}";

  // assuming we get the md5 hashed ID
  foreach ($wp_registered_widgets as $i => $w)
    if ($widget == substr(md5($w['id']), 0, 8)):
      $callback = ($w['callback']);
      $widget = $w['id']; // real widget ID

    // compare widget names as well, and build a array with the possible widget matches array
    // (which is used later if ID match fails)
    elseif($widget == $w['name']):
      $possible_matches[] = $w['id'];

    endif;

  // nothing found, assume it's the "Widget Name".
  if(!$callback):
    $valid_matches = array();
    foreach($sidebars_widgets[$sidebar] as $i => $w)
      foreach($possible_matches as $id) if($id == $w) $valid_matches[] = $w;

    if(!empty($valid_matches)) $widget = $number ? $valid_matches[$number-1] : $widget = $valid_matches[0];
    if($widget && isset($wp_registered_widgets[$widget]['callback'])) $callback = $wp_registered_widgets[$widget]['callback'];
  endif;

  // yey. we found it
  if($callback):
    ob_start();

    $params = array_merge(array(array_merge($wp_registered_sidebars[$sidebar], array('widget_id' => $widget, 'widget_name' => $wp_registered_widgets[$widget]['name']))), (array)$wp_registered_widgets[$widget]['params']);

    $classname_ = '';
    foreach ((array)$wp_registered_widgets[$widget]['classname'] as $cn)
      if (is_string($cn)) $classname_ .= '_'.$cn; elseif (is_object($cn)) $classname_ .= '_'.get_class($cn);
    $classname_ = ltrim($classname_, '_');
    $params[0]['before_widget'] = sprintf($params[0]['before_widget'], $widget, $classname_);
    $params = apply_filters('dynamic_sidebar_params', $params);

    if (is_callable($callback)) call_user_func_array($callback, $params);
    $output = ob_get_clean();

    // remove h3 if title = false
    if(!$title) $output = preg_replace('#<h3 class="title">(.*?)</h3>#', '', $output);
    return $output;
  else:
   return "widget instance not found: ".esc_attr($atts[0]);
  endif;
}

Te aparecerá una nueva sidebar en el área de widgets (admin>apariencia>widgets) llamada "Arbitrary widgets". Arrastras y guardas en ella cualquier plugin/widget que quieras poder insertar en los posts y, te dará el shortcode con necesitas utilizar.

Espero por ti... Ya he instalado el plugin que has marcado! :welcoming:
 

wifi

Lambda
Domainer
Verificado
Verificación en dos pasos activada
Desde
26 Ene 2012
Mensajes
2.780
que bueno, se agradece [MENTION=21550]Denarius[/MENTION] .
 

Ramnsés Rojas

Épsilon
Verificación en dos pasos activada
Desde
17 Mar 2011
Mensajes
817
Gracias, funciono! :welcoming:


Éste es el código que debes colocar en el functions.php de tu plantilla:

PHP:
add_action('widgets_init', 'create_arbitrary_sidebar');
function create_arbitrary_sidebar(){
  register_sidebar(array(
    'name' => __('Arbitrary Widgets'),
    'id' => 'arbitrary',
    'description' => sprintf(__('Widgets from this area can added into posts/pages using the %1$s or %2$s shortcodes.'), '[widget ID]', '[widget Name]'),
    'before_widget' => '<div class="block"><div class="block-content block-%2$s clear-block" id="instance-%1$s">',
    'after_widget' => '</div></div>',
    'before_title' => '<h3 class="title">',
    'after_title' => '</h3>'
   ));
}

add_action('in_widget_form', 'widget_shortcodes_info', 10, 3);
function widget_shortcodes_info($widget, $return, $instance){
  if(!is_numeric($widget->number)) return; // wp-save bug :( widget needs to be saved first...

  global $wp_registered_widgets;

  // get the active widgets from all sidebars
  $sidebars_widgets = wp_get_sidebars_widgets();

  // prepare matches
  $matches = array();
  foreach($wp_registered_widgets as $i => $w)
    if($w['name'] == $widget->name) $matches[] = $w['id'];

  // find out the widget position (number)
  $number = 0;
  $is_arbitrary = false;
  if(!empty($sidebars_widgets['arbitrary']))
    foreach($sidebars_widgets['arbitrary'] as $i => $value):
      if(in_array($value, $matches) && !$is_arbitrary) $number = $number +1;
      if($value == $widget->id) $is_arbitrary = true;
    endforeach;

  echo '<div style="background:#eee; padding: 5px;">To include this widget into your posts or pages use one of the following shortcodes: <br />';
  echo '<code>[widget '.substr(md5($widget->id), 0, 8).']</code> <br /> <code>[widget "'.$widget->name.'"'.(($number > 1) ? ' number='.$number : null).']</code></div>';
}

add_shortcode('widget', 'shortcode_widget');
function shortcode_widget($atts){
  global $wp_registered_widgets, $wp_registered_sidebars;
  extract(shortcode_atts(array(
    'number' => false,        // only taken in consideration if the 1st argument is the "Widget Name" (not the hashed ID)
    'title' => true,          // show titles?
    'area' => 'arbitrary'     // sidebar to search
  ), $atts));

  // get 1st parameter (assuming this is the target widget id or name)
  if (!empty($atts[0])) $widget = esc_attr($atts[0]); else return;

  $sidebar = esc_attr($area);
  $number = intval($number);

  $callback = false;
  $possible_matches = array();
  $sidebars_widgets = wp_get_sidebars_widgets();
  if((empty($sidebars_widgets[$sidebar]) || empty($wp_registered_widgets)) && (current_user_can('edit_themes')))
    return "no valid active widgets in {$sidebar}";

  // assuming we get the md5 hashed ID
  foreach ($wp_registered_widgets as $i => $w)
    if ($widget == substr(md5($w['id']), 0, 8)):
      $callback = ($w['callback']);
      $widget = $w['id']; // real widget ID

    // compare widget names as well, and build a array with the possible widget matches array
    // (which is used later if ID match fails)
    elseif($widget == $w['name']):
      $possible_matches[] = $w['id'];

    endif;

  // nothing found, assume it's the "Widget Name".
  if(!$callback):
    $valid_matches = array();
    foreach($sidebars_widgets[$sidebar] as $i => $w)
      foreach($possible_matches as $id) if($id == $w) $valid_matches[] = $w;

    if(!empty($valid_matches)) $widget = $number ? $valid_matches[$number-1] : $widget = $valid_matches[0];
    if($widget && isset($wp_registered_widgets[$widget]['callback'])) $callback = $wp_registered_widgets[$widget]['callback'];
  endif;

  // yey. we found it
  if($callback):
    ob_start();

    $params = array_merge(array(array_merge($wp_registered_sidebars[$sidebar], array('widget_id' => $widget, 'widget_name' => $wp_registered_widgets[$widget]['name']))), (array)$wp_registered_widgets[$widget]['params']);

    $classname_ = '';
    foreach ((array)$wp_registered_widgets[$widget]['classname'] as $cn)
      if (is_string($cn)) $classname_ .= '_'.$cn; elseif (is_object($cn)) $classname_ .= '_'.get_class($cn);
    $classname_ = ltrim($classname_, '_');
    $params[0]['before_widget'] = sprintf($params[0]['before_widget'], $widget, $classname_);
    $params = apply_filters('dynamic_sidebar_params', $params);

    if (is_callable($callback)) call_user_func_array($callback, $params);
    $output = ob_get_clean();

    // remove h3 if title = false
    if(!$title) $output = preg_replace('#<h3 class="title">(.*?)</h3>#', '', $output);
    return $output;
  else:
   return "widget instance not found: ".esc_attr($atts[0]);
  endif;
}

Te aparecerá una nueva sidebar en el área de widgets (admin>apariencia>widgets) llamada "Arbitrary widgets". Arrastras y guardas en ella cualquier plugin/widget que quieras poder insertar en los posts y, te dará el shortcode con necesitas utilizar.
 
Arriba