{"id":28792,"date":"2021-05-31T11:50:00","date_gmt":"2021-05-31T08:50:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28792"},"modified":"2021-10-18T03:38:26","modified_gmt":"2021-10-18T00:38:26","slug":"jak-zbudowac-niestandardowy-widzet-elementor","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pl\/jak-zbudowac-niestandardowy-widzet-elementor\/","title":{"rendered":"Jak zbudowa\u0107 niestandardowy wid\u017cet Elementor"},"content":{"rendered":"<p><a href=\"https:\/\/wordpress.org\/plugins\/elementor\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Elementor<\/a> jest jednym z najpopularniejszych kreator\u00f3w stron dla WordPress. Tworzenie witryny WordPress za pomoc\u0105 Elementora jest \u0142atwe i mo\u017cesz zaoszcz\u0119dzi\u0107 mn\u00f3stwo czasu, korzystaj\u0105c z tej popularnej wtyczki. Elementor udost\u0119pnia wid\u017cety do tworzenia r\u00f3\u017cnych sekcji na Twoich stronach. Wystarczy wzi\u0105\u0107 widget, skonfigurowa\u0107 go, a on wy\u015bwietli wygenerowane elementy na interfejsie.<\/p>\n<p>Mo\u017ce si\u0119 zdarzy\u0107, \u017ce nie otrzymasz wybranych wid\u017cet\u00f3w. By\u0107 mo\u017ce szukasz innej funkcjonalno\u015bci, kt\u00f3ra nie jest mo\u017cliwa dzi\u0119ki domy\u015blnym wid\u017cetom Elementora. W takich sytuacjach potrzebujesz niestandardowego wid\u017cetu, kt\u00f3ry spe\u0142nia Twoje wymagania. Na szcz\u0119\u015bcie Elementor mo\u017cna \u0142atwo rozszerzy\u0107 i mo\u017cesz zbudowa\u0107 dowoln\u0105 funkcjonalno\u015b\u0107, tworz\u0105c rozszerzenie Elementora. Rozszerzenia Elementora s\u0105 takie same jak zwyk\u0142e wtyczki WordPress, rozszerzaj\u0105 podstawow\u0105 funkcjonalno\u015b\u0107.<\/p>\n<p>W tym artykule poka\u017c\u0119, jak zbudowa\u0107 niestandardowy wid\u017cet Elementora, kt\u00f3ry jest niczym innym jak rozszerzeniem Elementora.<\/p>\n<p>Aby zobaczy\u0107 to praktycznie, bior\u0119 przyk\u0142ad <a href=\"https:\/\/getbootstrap.com\/docs\/4.1\/components\/carousel\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Bootstrap Carousel<\/a>. Zbudujemy wtyczk\u0119 WordPress dla niestandardowego wid\u017cetu Elementor. Ten wid\u017cet umo\u017cliwi Ci dodanie karuzeli Bootstrap do Twoich stron.<\/p>\n<p>Celem tego samouczka jest zapoznanie si\u0119 z tworzeniem wid\u017cet\u00f3w Elementor. Zamierzamy opracowa\u0107 wid\u017cet Elementora dla karuzeli Bootstrap. Stosuj\u0105c to samo podej\u015bcie, mo\u017cesz tworzy\u0107 w\u0142asne wid\u017cety.<\/p>\n<h3>Tworzenie rozszerzenia dla Elementora<\/h3>\n<p>Aby rozpocz\u0105\u0107, musisz zainstalowa\u0107 i aktywowa\u0107 wtyczk\u0119 Elementor. Nast\u0119pnie utw\u00f3rz folder \u201eartisansweb-elementor-add-on&quot; w katalogu \u201ewp-content\/plugins&#8221;. Tutaj do nazwy folderu oraz w dalszej cz\u0119\u015bci kodu u\u017cywam terminu \u201eartisansweb&#8221;, aby zachowa\u0107 unikalne odniesienia. Mo\u017cesz zmieni\u0107 ten termin, co chcesz.<\/p>\n<p>Wewn\u0105trz naszej wtyczki utw\u00f3rz plik <code>artisansweb-elementor-add-on.php<\/code>. Ten plik b\u0119dzie zawiera\u0142 kod, kt\u00f3ry tworzy rozszerzenie Elementora.<\/p>\n<p>Schemat tworzenia rozszerzenia otrzymasz w <a href=\"https:\/\/developers.elementor.com\/creating-an-extension-for-elementor\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dokumentacji<\/a> Elementora .<\/p>\n<p>Post\u0119puj\u0105c zgodnie z dokumentacj\u0105 napisa\u0142em poni\u017cszy kod, kt\u00f3ry nale\u017cy doda\u0107 do <code>artisansweb-elementor-add-on.php<\/code>pliku.<\/p>\n<pre><code>&lt;?php\n\/*\nPlugin Name: Elementor Widget - Bootstrap Carousel\nPlugin URI: https:\/\/artisansweb.net\nDescription: Creates a Bootstrap Carousel.\nAuthor: Artisans Web\nVersion: 1.0\nAuthor URI: https:\/\/artisansweb.net\n*\/\n\u00a0\nif (! defined( 'ABSPATH')) {\n\u00a0\u00a0\u00a0\u00a0exit; \/\/ Exit if accessed directly.\n}\n\u00a0\nfinal class Artisansweb_Elementor_Extension {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0const VERSION = '1.0';\n\u00a0\u00a0\u00a0\u00a0const MINIMUM_ELEMENTOR_VERSION = '2.0.0';\n\u00a0\u00a0\u00a0\u00a0const MINIMUM_PHP_VERSION = '7.0';\n\u00a0\n\u00a0\u00a0\u00a0\u00a0private static $_instance = null;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public static function instance() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (is_null( self::$_instance)) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0self::$_instance = new self();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return self::$_instance;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public function __construct() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0add_action( 'init', [ $this, 'i18n' ] );\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0add_action( 'plugins_loaded', [ $this, 'init' ] );\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_scripts' ], 11 );\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public function init() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Check if Elementor installed and activated\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (! did_action( 'elementor\/loaded')) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0add_action( 'admin_notices', [ $this, 'admin_notice_missing_main_plugin' ] );\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Check for required Elementor version\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (! version_compare( ELEMENTOR_VERSION, self::MINIMUM_ELEMENTOR_VERSION, '&gt;=')) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0add_action( 'admin_notices', [ $this, 'admin_notice_minimum_elementor_version' ] );\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Check for required PHP version\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (version_compare( PHP_VERSION, self::MINIMUM_PHP_VERSION, '&lt;')) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0add_action( 'admin_notices', [ $this, 'admin_notice_minimum_php_version' ] );\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Add Plugin actions\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0add_action( 'elementor\/widgets\/widgets_registered', [ $this, 'init_widgets' ] );\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function i18n() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0load_plugin_textdomain( 'artisansweb-elementor-add-on' );\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function admin_notice_missing_main_plugin() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (isset( $_GET['activate'])) unset( $_GET['activate'] );\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$message = sprintf(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/* translators: 1: Plugin name 2: Elementor *\/\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0esc_html__( '\"%1$s\" requires \"%2$s\" to be installed and activated.', 'artisansweb-elementor-add-on' ),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'&lt;strong&gt;'. esc_html__( 'Elementor', 'artisansweb-elementor-add-on' ). '&lt;\/strong&gt;'\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0printf( '&lt;div class=\"notice notice-warning is-dismissible\"&gt;&lt;p&gt;%1$s&lt;\/p&gt;&lt;\/div&gt;', $message );\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function admin_notice_minimum_elementor_version() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (isset( $_GET['activate'])) unset( $_GET['activate'] );\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$message = sprintf(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/* translators: 1: Plugin name 2: Elementor 3: Required Elementor version *\/\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0esc_html__( '\"%1$s\" requires \"%2$s\" version %3$s or greater.', 'artisansweb-elementor-add-on' ),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'&lt;strong&gt;'. esc_html__( 'Elementor', 'artisansweb-elementor-add-on' ). '&lt;\/strong&gt;',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0self::MINIMUM_ELEMENTOR_VERSION\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0printf( '&lt;div class=\"notice notice-warning is-dismissible\"&gt;&lt;p&gt;%1$s&lt;\/p&gt;&lt;\/div&gt;', $message );\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function admin_notice_minimum_php_version() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (isset( $_GET['activate'])) unset( $_GET['activate'] );\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$message = sprintf(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/* translators: 1: Plugin name 2: PHP 3: Required PHP version *\/\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0esc_html__( '\"%1$s\" requires \"%2$s\" version %3$s or greater.', 'artisansweb-elementor-add-on' ),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'&lt;strong&gt;'. esc_html__( 'PHP 7.0', 'artisansweb-elementor-add-on' ). '&lt;\/strong&gt;',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0self::MINIMUM_PHP_VERSION\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0printf( '&lt;div class=\"notice notice-warning is-dismissible\"&gt;&lt;p&gt;%1$s&lt;\/p&gt;&lt;\/div&gt;', $message );\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0public function init_widgets() {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Include Widget files\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0require_once( __DIR__. '\/widgets\/artisansweb-testimonial-widget.php' );\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ Register widget\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ElementorPlugin::instance()-&gt;widgets_manager-&gt;register_widget_type( new Artisansweb_Testmonial_Widget() );\n\u00a0\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public function enqueue_scripts() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0wp_register_style( \"bootstrap-css\", \"https:\/\/stackpath.bootstrapcdn.com\/bootstrap\/4.1.3\/css\/bootstrap.min.css\", array(), false, \"all\" );\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0wp_enqueue_style( \"bootstrap-css\" );\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0wp_register_script(\"bootstrap-js\", \"https:\/\/stackpath.bootstrapcdn.com\/bootstrap\/4.1.3\/js\/bootstrap.min.js\", array(), false, true);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0wp_enqueue_script(\"bootstrap-js\");\n\u00a0\u00a0\u00a0\u00a0}\n}\nArtisansweb_Elementor_Extension::instance();<\/code><\/pre>\n<p>W powy\u017cszym kodzie inside <code>init_widgets()<\/code>umie\u015bci\u0142em a <code>artisansweb-testimonial-widget.php<\/code>z katalogu 'widgets&#8217;. Oznacza to, \u017ce musisz stworzy\u0107 folder \u201ewidgety&#8221; i wewn\u0105trz niego utworzy\u0107 <code>artisansweb-testimonial-widget.php<\/code>plik.<\/p>\n<p>Z funkcji doda\u0142em pliki JS i CSS Bootstrapa <code>enqueue_scripts<\/code>. Zauwa\u017c, \u017ce bezpo\u015brednio poda\u0142em \u015bcie\u017ck\u0119 CDN tych plik\u00f3w. U\u017cytkownik mo\u017ce zachowa\u0107 te pliki w folderze wtyczki i do\u0142\u0105czy\u0107 je, zast\u0119puj\u0105c powy\u017csz\u0105 \u015bcie\u017ck\u0119 CDN.<\/p>\n<p>Na tym etapie powiniene\u015b zobaczy\u0107 nazw\u0119 wtyczki na stronie <strong>Wtyczki-&gt;Zainstalowane wtyczki<\/strong>.<\/p>\n<p>Nie aktywuj wtyczki. Musimy napisa\u0107 wi\u0119cej kodu, aby to dzia\u0142a\u0142o.<\/p>\n<h3>Struktura wid\u017cetu Elementora<\/h3>\n<p>Sko\u0144czyli\u015bmy z do\u0142\u0105czaniem wymaganych plik\u00f3w dla naszego wid\u017cetu. Nast\u0119pn\u0105 cz\u0119\u015bci\u0105 jest stworzenie rzeczywistego wid\u017cetu Elementora. Witryna Elementor zapewni\u0142a <a href=\"https:\/\/developers.elementor.com\/creating-a-new-widget\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">struktur\u0119 wid\u017cet\u00f3w,<\/a> kt\u00f3r\u0105 musimy przestrzega\u0107.<\/p>\n<p>Dodaj podstawow\u0105 struktur\u0119 do <code>artisansweb-testimonial-widget.php<\/code>pliku w nast\u0119puj\u0105cy spos\u00f3b.<\/p>\n<pre><code>&lt;?php\nclass Artisansweb_Testmonial_Widget extends ElementorWidget_Base {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public function get_name() {}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public function get_title() {}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public function get_icon() {}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public function get_categories() {}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0protected function _register_controls() {}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0protected function render() {}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0protected function _content_template() {}\n\u00a0\n}<\/code><\/pre>\n<p>Wszystkie metody zdefiniowane w powy\u017cszej klasie maj\u0105 w\u0142asn\u0105 odpowiedzialno\u015b\u0107. Musisz doda\u0107 nazw\u0119 wid\u017cetu w metodzie <code>get_name()<\/code>, ikona wid\u017cetu wejdzie do \u015brodka <code>get_icon()<\/code>, wy\u015bwietli si\u0119 cz\u0119\u015b\u0107 frontendowa z <code>render()<\/code>metody i tak dalej. Opisy wszystkich metod dost\u0119pne s\u0105 w ich <a href=\"https:\/\/developers.elementor.com\/creating-a-new-widget\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dokumentacji<\/a>.<\/p>\n<p><strong>Uwaga:<\/strong> Elementor pozwala na u\u017cywanie wspania\u0142ych ikon, wystarczy zwr\u00f3ci\u0107 nazw\u0119 klasy jako ci\u0105g znak\u00f3w. Dodam ikon\u0119 'fa fa-sliders&#8217; dla naszego wid\u017cetu.<\/p>\n<p>Wype\u0142nijmy kod dla wszystkich metod z wyj\u0105tkiem <code>render()<\/code>. Poniewa\u017c musimy pobra\u0107 referencj\u0119 z karuzeli Bootstrap, dodamy kod <code>render()<\/code>funkcji w dalszej cz\u0119\u015bci samouczka.<\/p>\n<pre><code>&lt;?php\nclass Artisansweb_Testmonial_Widget extends ElementorWidget_Base {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public function get_name() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return 'artisansweb-carousel';\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public function get_title() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return __( 'Artisansweb Carousel', 'artisansweb-elementor-add-on' );\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public function get_icon() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return 'fa fa-sliders';\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public function get_categories() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return [ 'general' ];\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0protected function _register_controls() {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;start_controls_section(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'content_section',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0[\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'label' =&gt; __( 'Content', 'artisansweb-elementor-add-on' ),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'tab' =&gt; ElementorControls_Manager::TAB_CONTENT,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$repeater = new ElementorRepeater();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$repeater-&gt;add_control(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'list_title', [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'label' =&gt; __( 'Title', 'artisansweb-elementor-add-on' ),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'type' =&gt; ElementorControls_Manager::TEXT,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'default' =&gt; __( 'List Title', 'artisansweb-elementor-add-on' ),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'label_block' =&gt; true,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$repeater-&gt;add_control(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'list_image',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0[\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'label' =&gt; __( 'Choose Image', 'artisansweb-elementor-add-on' ),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'type' =&gt; ElementorControls_Manager::MEDIA,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'default' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'url' =&gt; ElementorUtils::get_placeholder_image_src(),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;add_control(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'list',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0[\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'label' =&gt; __( 'Repeater List', 'artisansweb-elementor-add-on' ),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'type' =&gt; ElementorControls_Manager::REPEATER,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'fields' =&gt; $repeater-&gt;get_controls(),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'default' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0[\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'list_title' =&gt; __( 'Title #1', 'artisansweb-elementor-add-on' ),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'list_image' =&gt; __( 'Item image.', 'artisansweb-elementor-add-on' ),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0[\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'list_title' =&gt; __( 'Title #2', 'artisansweb-elementor-add-on' ),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'list_image' =&gt; __( 'Item image.', 'artisansweb-elementor-add-on' ),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'title_field' =&gt; '{{{ list_title }}}',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;end_controls_section();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0protected function render() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ generate the final HTML on the frontend using PHP\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>U\u017cy\u0142em kontrolki wzmacniacza Elementor, kt\u00f3ra pozwala budowa\u0107 powtarzalne bloki p\u00f3l. Poniewa\u017c tworzymy karuzel\u0119, b\u0119dzie ona mia\u0142a wiele p\u00f3l. Tutaj poda\u0142em opcje dodawania obrazu i podpisu za pomoc\u0105 kontrolki repeatera.<\/p>\n<p>Wraz z kontrolk\u0105 repeatera u\u017cy\u0142em r\u00f3wnie\u017c kontrolki Text and Media. <a href=\"https:\/\/developers.elementor.com\/register-widget-controls\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Kliknij tutaj,<\/a> aby przeczyta\u0107 wi\u0119cej o kontrolkach Elementora.<\/p>\n<p>Aktywuj wtyczk\u0119 i spr\u00f3buj edytowa\u0107 swoj\u0105 stron\u0119 za pomoc\u0105 Elementora. Wyszukaj \u201eArtisansweb Carousel&#8221;, dodaj ten wid\u017cet do strony. Zobaczysz opcje dodawania podpis\u00f3w i obraz\u00f3w, jak pokazano na zrzucie ekranu poni\u017cej.<\/p>\n<h3>Karuzela Bootstrap przy u\u017cyciu niestandardowego wid\u017cetu Elementor<\/h3>\n<p>Wszyscy postanowili\u015bmy zbudowa\u0107 karuzel\u0119 za pomoc\u0105 wid\u017cetu Elementor. Je\u015bli spojrzysz na dokumentacj\u0119 <a href=\"https:\/\/getbootstrap.com\/docs\/4.1\/components\/carousel\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">karuzeli Bootstrap<\/a>, dostarczyli oni kod HTML dla karuzeli. Podam przyk\u0142ad karuzeli z napisami. W przypadku tego typu karuzeli musisz u\u017cy\u0107 poni\u017cszego kodu HTML.<\/p>\n<pre><code>&lt;div id=\"carouselExampleIndicators\" class=\"carousel slide\" data-ride=\"carousel\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;ol class=\"carousel-indicators\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;li data-target=\"#carouselExampleIndicators\" data-slide-to=\"0\" class=\"active\"&gt;&lt;\/li&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;li data-target=\"#carouselExampleIndicators\" data-slide-to=\"1\"&gt;&lt;\/li&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/ol&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"carousel-inner\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"carousel-item active\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;img class=\"d-block w-100\" src=\"...\/800x400?auto=yes&amp;bg=777&amp;fg=555&amp;text=First slide\" alt=\"First slide\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;h3&gt;Caption here...&lt;\/h3&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"carousel-item\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;img class=\"d-block w-100\" src=\"...\/800x400?auto=yes&amp;bg=666&amp;fg=444&amp;text=Second slide\" alt=\"Second slide\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;h3&gt;Caption here...&lt;\/h3&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;a class=\"carousel-control-prev\" href=\"#carouselExampleIndicators\" role=\"button\" data-slide=\"prev\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"&gt;&lt;\/span&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;span class=\"sr-only\"&gt;Previous&lt;\/span&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/a&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;a class=\"carousel-control-next\" href=\"#carouselExampleIndicators\" role=\"button\" data-slide=\"next\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;span class=\"carousel-control-next-icon\" aria-hidden=\"true\"&gt;&lt;\/span&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;span class=\"sr-only\"&gt;Next&lt;\/span&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/a&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>Powy\u017cszy to statyczny kod HTML. Je\u015bli chodzi o wid\u017cet Elementor, musimy uczyni\u0107 go dynamicznym, u\u017cywaj\u0105c warto\u015bci dodanych do tytu\u0142u i obrazu.<\/p>\n<p>Tak wi\u0119c nasza <code>render()<\/code>metoda b\u0119dzie mia\u0142a nast\u0119puj\u0105cy kod.<\/p>\n<pre><code>&lt;?php\nprotected function render() {\n\u00a0\u00a0\u00a0\u00a0\/\/ generate the final HTML on the frontend using PHP\n\u00a0\u00a0\u00a0\u00a0$settings = $this-&gt;get_settings_for_display();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0if ($settings['list']) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0?&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div id=\"carouselExampleIndicators\" class=\"carousel slide\" data-ride=\"carousel\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;ol class=\"carousel-indicators\"&gt;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;?php for($i=0; $i&lt;count($settings['list']); $i++) { ?&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;li data-target=\"#carouselExampleIndicators\" data-slide-to=\"0\" class=\"&lt;?php echo ($i==0)? 'active':''; ?&gt;\"&gt;&lt;\/li&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;?php } ?&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/ol&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"carousel-inner\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;?php $i = 0; ?&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;?php foreach (\u00a0 $settings['list'] as $item) { ?&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"carousel-item &lt;?php echo ($i==0)? 'active':''; ?&gt;\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;img class=\"d-block w-100\" src=\"&lt;?php echo $item['list_image']['url']; ?&gt;\" alt=\"&lt;?php echo $item['list_title']; ?&gt;\" \/&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"carousel-caption d-none d-md-block\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;h3&gt;&lt;?php echo $item['list_title']; ?&gt;&lt;\/h3&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;?php $i++; ?&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;?php } ?&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;a class=\"carousel-control-prev\" href=\"#carouselExampleIndicators\" role=\"button\" data-slide=\"prev\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"&gt;&lt;\/span&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;span class=\"sr-only\"&gt;Previous&lt;\/span&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/a&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;a class=\"carousel-control-next\" href=\"#carouselExampleIndicators\" role=\"button\" data-slide=\"next\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;span class=\"carousel-control-next-icon\" aria-hidden=\"true\"&gt;&lt;\/span&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;span class=\"sr-only\"&gt;Next&lt;\/span&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/a&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;?php\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Ot\u00f3\u017c \u200b\u200bto! Dodaj swoje obrazy i podpisy, a na Twojej stronie powinna pojawi\u0107 si\u0119 karuzela Bootstrap.<\/p>\n<p>Wszystko sprowadza si\u0119 do tworzenia wid\u017cet\u00f3w w Elementorze. W podobny spos\u00f3b mo\u017cesz dostosowa\u0107 kod, aby u\u017cywa\u0107 r\u00f3\u017cnych kontrolek Elementora i generowa\u0107 niestandardowe wid\u017cety zgodnie z w\u0142asnymi wymaganiami.<\/p>\n<p>Mam nadziej\u0119, \u017ce rozumiesz, jak zbudowa\u0107 niestandardowy wid\u017cet Elementora. Podziel si\u0119 swoimi przemy\u015bleniami i sugestiami w sekcji komentarzy poni\u017cej.<\/p>\n<h4>Powi\u0105zane artyku\u0142y<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/integracja-mailchimp-z-wtyczka-contact-form-7-7\/\" title=\"Integracja MailChimp z wtyczk\u0105 Contact Form 7 7\">Integracja MailChimp z wtyczk\u0105 Contact Form 7 7<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-dodac-kod-po-tagu-body-w-wordpressie\/\" title=\"Jak doda\u0107 kod po tagu Body w WordPressie\">Jak doda\u0107 kod po tagu Body w WordPressie<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-wyslac-e-mail-wordpress-za-pomoca-serwera-smtptp\/\" title=\"Jak wys\u0142a\u0107 wiadomo\u015b\u0107 e-mail WordPress za pomoc\u0105 serwera SMTP\">Jak wys\u0142a\u0107 wiadomo\u015b\u0107 e-mail WordPress za pomoc\u0105 serwera SMTP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Czy chcesz zbudowa\u0107 niestandardowy wid\u017cet Elementora? Korzystaj\u0105c z niestandardowego wid\u017cetu Elementor, mo\u017cesz doda\u0107 dowoln\u0105 funkcjonalno\u015b\u0107 do swojej witryny WordPress.<\/p>\n","protected":false},"author":1,"featured_media":20397,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[209],"tags":[847],"class_list":["post-28792","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-elementor-8","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/28792","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/comments?post=28792"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/28792\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media\/20397"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media?parent=28792"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/categories?post=28792"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/tags?post=28792"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}