Soporte » WordPress Avanzado » Codigo sidebar en php objetos

  • francisco8888

    (@francisco8888)


    Acabo de construir esta funcion para crear sidebar pero no se como tengo que llamar a la funcion con un add action porque la funcion es un objeto en si.

    <?php
    /**
     * Construir una sidebar widget con php objetos
     * Pegar en el functions del tema
     * 
     */
    class sidebarwidget{
    
    	public $name;
    	public $id;
    	public $clasesidebar;
    	public $descripcionsidebar;
    	public $traduccion;
    	public $elementwidget;
    	public $element_title;
    	
    	function __construct($name,$id,$clasesidebar,$descripcionsidebar,$traduccion,$elementwidget, $element_title) {
    	
    	$this->name = $name;
    	$this->id = $id;
    	$this->clasesidebar = $clasesidebar;
    	$this->descripcionsidebar = $descripcionsidebar;
    	$this->traduccion = $traduccion;
    	$this->elementwidget = $elementwidget;
    	$this->element_title = $element_title;
    	  }/**Fin del constructor */
    	
    	public function sidebar_widgets_obj() {
    		register_sidebar(
    			array(
    				'name'          => esc_html__( "{$this->name}" ),
    				'id'            => "{$this->id}",
    				'class'         => "{$this->clasesidebar}",
    				'description'   => esc_html__( "{$this->descripcionsidebar}", "{$this->traduccion}" ),
    				'before_widget' => "<{$this->elementwidget}" . 'id="%1$s" class="widget %2$s"> ' ,
    				'after_widget'  => "</{$this->elementwidget}>",
    				'before_title'  => "<{$this->element_title}" . 'class="widget-title">',
    				'after_title'   => "</{$this->element_title}>",
    					)/**end_array */);/**end_register_sidebar */
    				}/**end sidebar widget obj */				
    			}/**end class sidebar widget obj */
    				
    $sidebar10 = new sidebarwidget("new_widget_area_obj" , "prueba_widget" , "claseprueba" , "widgetbarra_objetos" , "traduccion" , "section" , "h4");
    $sidebar10->sidebar_widgets_obj();
    
    ?>
Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)
  • Moderador josearcos

    (@josearcos)

    Hola @francisco8888. Si el fragmento de código lo tienes en un archivo externo, tendrás que referenciarlo desde functions.php si estás en un tema con una función tipo require. Por ejemplo, si el archivo se llama sidebarwidget.php tendrías que añadir la siguiente línea de código a tu functions.php:

    require_once plugin_dir_path( __FILE__ ) . 'sidebarwidget.php';

    Saludos.

    francisco8888

    (@francisco8888)

    Lo estoy haciendo directamente desde el function del tema, y el codigo funciona porque registra el area de widget, lo que falla es esta linea.

    <h3>Se supone que yo llamo a la funcion de esta manera pero da error </h3>

    add_action( 'widgets_init', "{$sidebar10->sidebar_widgets_obj}" );

    El segundo parámetro de la función add_action es de tipo Callable, por lo que puede adoptar muchas formas. Tienes más info en la documentación de PHP

    En tu caso, primero necesitas instanciar un objeto de la clase sidebarwidget (no olvides lo dicho por @josearcos, deberás hacer un require o similar), y luego añadir el hook:

    
    // Instancias el sidebar
    $sidebar = new sidebarwidget($name,$id,$clasesidebar,$descripcionsidebar,$traduccion,$elementwidget, $element_title);
    
    // Añades el Hook
    add_action( 'widgets_init', [$sidebar, 'sidebar_widgets_obj'] );
    
    • Esta respuesta fue modificada hace 2 semanas, 4 días por David Navia.

    Fenomenal, muchísimas gracias, cuando lo pruebe te digo.
    El require no me hizo falta porque porque lo estaba ejecutando en el function del themme, el código funcionaba pero lo que le ocurría es que si no añadida un nuevo widget no se añadía la sidebar al personalizador de wordpress, tengo que estudiar mas la documentación, tengo una pedazo de idea para montar un theme y estoy estudiando la documentacion de wordpress a fondo, un saludo, muchas gracias.

    Genial. Si te funciona, no olvides marcar el hilo como solucionado.

    Un saludo

Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)
  • Debes estar registrado para responder a este debate.