I’m instantiating a widget using the Widget API code directly from codex, my constructor looks like this:
function __construct() {
parent::__construct(
'some_widget',
esc_html__( 'Some Widget', 'text-domain' ),
array( 'description' => esc_html__( 'A Widget', 'text-domain' ) )
);
}
Yet if I check for rows like this:
if ( have_rows( 'featured_pages_widget', 'widget_some_widget' ) ) :
I get nothing. But if I add -2
if ( have_rows( 'featured_pages_widget', 'widget_some_widget-2' ) ) :
It works fine. Any ideas?
I ended up figuring this out on my own, and without a filter as described in the docs. In my case, I was using the widget API ‘foo’ example from codex. if you are following along and have similar issues use:
$args[‘widget_id’]
As the widget id. It wants the id of the instance, not just the widget itself. A fuller example using a repeater:
public function widget( $args, $instance ) {
echo $args['before_widget'];
if ( ! empty( $instance['title'] ) ) {
echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title'];
}
if ( have_rows( 'some_fields', 'widget_' . $args['widget_id'] ) ) {
while ( have_rows( 'some_fields', 'widget_' . $args['widget_id'] ) ) {
the_row();
// do stuff in here
}
}
echo $args['after_widget'];
}