Предположим, у меня есть виджет, который отображает только его имя:
<p> <?php echo $args['widget_id'] ?> </p>
Поэтому, когда я перетаскиваю свой виджет на любую боковую панель, он показывает:
<p> myWidget-number </p>
Проблема в том, что я хочу называть этот виджет коротким кодом:
(...) ob_start(); the_widget(MyWidget); return ob_get_clean(); } add_shortcode('myWidget_short', 'myWidget_shortcode');
И когда я делаю [myWidget_short], он показывает только
<p> </p>
Любые идеи, как назвать идентификатор виджета с помощью короткого кода?
Я считаю, что @One Trick Pony был прав.
У виджетов короткого кода нет идентификатора, поэтому я нашел способ обойти.
Во-первых, я использовал функцию PHP rand:
$var = rand();
Затем добавлен «var» в ID, поэтому он не сталкивается с другими кодами, вызывающими один и тот же виджетов (каждый из них имеет различное случайное число в конце идентификатора):
<div id="myWidget-<?php echo $var?>;"></div>
Я построил короткий код для вызова боковых панелей и короткий код для вызова виджетов в Total Widget Control . Боковые панели, которые довольно легко создать, просто вызывают dynamic_sidebar
внутри ob_start ();
Однако вызов отдельных виджетов был довольно сложным. global $wp_registered_widgets
Я думаю, что это глобальная переменная, содержащая полный экземпляр виджета. Вам нужно сначала создать свою собственную функцию, которая позволит вам захватить экземпляр виджета, а затем вам нужно вызвать функцию обратного вызова виджета, чтобы отобразить виджет.
Код, который вы пытаетесь использовать the_widget
действительно требует, чтобы вы the_widget
экземпляр виджета в качестве параметра. Он не способен искать сам виджет.