Hi, I am very confused. Trying to implement my own set of widgets and do not really have much WP knowledge, so please help:
https://siteorigin.com/docs/widgets-bundle/getting-started/creating-a-widget/
So I registered the widget copying this code into my functions.php file of my theme:
<?php function add_my_awesome_widgets_collection($folders){ $folders[] = 'widgets/'; return $folders; } add_filter('siteorigin_widgets_widget_folders', 'add_my_awesome_widgets_collection'); ?>
I created a widgets folder inside my theme’s directory, along with a subfolder with the name of accordion-widget, storing accordion-widget.php inside of it. Then I used this inside accordion-widget.php
<?php /* Widget Name: Hello world widget Description: An example widget which displays 'Hello world!'. Author: Me Author URI: http://example.com Widget URI: http://example.com/hello-world-widget-docs, Video URI: http://example.com/hello-world-widget-video */ class Accordion extends SiteOrigin_Widget { function get_template_name($instance) { return 'default'; } function get_style_name($instance) { return ''; } } siteorigin_widget_register('accordion', __FILE__, 'Accordion'); ?>
I also created a folder named tpl and stored default.php which is empty for now inside of it, in the same folder that accordion-widget.php is stored. Now in the post, it says that as soon you add this code, the widget will appear in the Plugins > SiteOrigin Widgets list, but it doesn’t. Any idea what I might be doing wrong?
UPDATE
Never mind, solved it!
$folders[] = get_template_directory() . '/widgets/';
====================================================
NEW ISSUE!
But now after copying this code in the accordion-widget.php file:
function __construct() { //Here you can do any preparation required before calling the parent constructor, such as including additional files or initializing variables. //Call the parent constructor with the required arguments. parent::__construct( // The unique id for your widget. 'accordion_widget', // The name of the widget for display purposes. __('Accordion widget', 'accordion-widget-text-domain'), // The $widget_options array, which is passed through to WP_Widget. // It has a couple of extras like the optional help URL, which should link to your sites help or support page. array( 'description' => __('A hello world widget.', 'accordion-widget-text-domain'), 'help' => 'http://example.com/hello-world-widget-docs', ), //The $control_options array, which is passed through to WP_Widget array( ), //The $form_options array, which describes the form fields used to configure SiteOrigin widgets. We'll explain these in more detail later. array( 'text' => array( 'type' => 'text', 'label' => __('Hello world! goes here.', 'siteorigin-widgets'), 'default' => 'Hello world!' ), ), //The $base_folder path string. get_template_directory() ); }
I get this error in my post editor in the admin panel
Warning: Missing argument 1 for SiteOrigin_Widget::__construct(), called in /home/*********/public_html/wp-includes/widgets.php on line 591 and defined in /home/*********/public_html/wp-content/plugins/so-widgets-bundle/base/siteorigin-widget.class.php on line 47
Warning: Missing argument 2 for SiteOrigin_Widget::__construct(), called in /home/*********/public_html/wp-includes/widgets.php on line 591 and defined in /home/*********/public_html/wp-content/plugins/so-widgets-bundle/base/siteorigin-widget.class.php on line 47
Which I am pretty sure has to do something with this line:
//The $base_folder path string. plugin_dir_path(__FILE__)
What should I do with this line? How can I approach this in a way that I can setup my new widget through the theme instead of creating a new plugin? Thank you!
Hi Meysam
Unfortunately, this isn’t possible without a fair amount of custom coding. This is beyond the scope of what we can help you with on the forums, but you could hire a developer to implement this for you.
We highly recommend using https://codeable.io/.