it-swarm.com.de

Zufällige Anzeige von Widgets in meiner Seitenleiste

Ich habe eine Seitenleiste, die eine beliebige Anzahl von Widgets haben kann. Ich kann die Anzahl der Widgets in der Seitenleiste zählen. Wie zeige ich bei jedem Seitenaufruf zufällig nur eines der Widgets in meiner Seitenleiste an?

Verwendung: Wir haben Specials, die wir als Widgets anzeigen, aber wir möchten immer nur den Inhalt eines Widgets in der Fußzeile der Site anzeigen.

re: der Zählcode

<?php $the_sidebars = wp_get_sidebars_widgets();
echo count( $the_sidebars['center-footer'] ); ?>

re: Erzeugen einer zufälligen Widget-Instanz

<?php echo Rand(1, count( $the_sidebars['center-footer'] )); ?>
3
Gordon

Ich konnte nicht erkennen, dass die Antworten in dem möglichen doppelten Link den sidebars_widgets-Filter verwenden. Lassen Sie mich dies hier als eine weitere Möglichkeit hinzufügen:

Im Folgenden wird davon ausgegangen, dass Sie die Funktion dynamic_sidebar() verwenden, um Ihre Seitenleisten/Widgets anzuzeigen, oder einfach alles, was die Funktion wp_get_sidebars_widgets() aufruft.

Widgets zufällig auswählen:

Dieses Code-Snippet zeigt alle Widgets in zufälliger Reihenfolge an:

/** 
 * Randomize widgets in a given sidebar (index)
 * 
 * @See http://wordpress.stackexchange.com/a/152408/26350
 */
! is_admin() && add_filter( 'sidebars_widgets', function( $sidebars_widgets ) {

    // ------------------------
    // Edit this to your needs:
    $sidebar_index = 'sidebar-1';
    // ------------------------

    if( isset( $sidebars_widgets[$sidebar_index] ) )
    {
          // Randomize the array:
          shuffle( $sidebars_widgets[$sidebar_index] );
    }
    return $sidebars_widgets;
}, PHP_INT_MAX );

Widgets zufällig auswählen - nur ein einzelnes Widget anzeigen:

Dieses Code-Snippet zeigt nur ein einzelnes zufälliges Widget an:

/** 
 * Randomize widgets in a given sidebar (index) and only display a single widget
 * 
 * @See http://wordpress.stackexchange.com/a/152408/26350 
 */
! is_admin() && add_filter( 'sidebars_widgets', function( $sidebars_widgets ) {

    // ------------------------
    // Edit this to your needs:
    $sidebar_index = 'sidebar-1';
    // ------------------------

    if( isset( $sidebars_widgets[$sidebar_index] ) )
    {
         // Randomize the array:
         shuffle( $sidebars_widgets[$sidebar_index] );

         // Slice the array:
         $sidebars_widgets[$sidebar_index] = array_slice( $sidebars_widgets[$sidebar_index], 0, 1 );
    }
    return $sidebars_widgets;
}, PHP_INT_MAX );

Sie müssen nur daran denken, den $sidebar_index Ihren Bedürfnissen anzupassen.

Ich hoffe das hilft.

2
birgire