it-swarm.com.de

Wie füge ich ein bestimmtes Widget nur einer Seite hinzu?

Ich möchte ein Widget nur auf einer Seite meiner Website anzeigen, da ich sehe, dass dies nicht möglich ist, oder?

Soll ich das für alle meine Seiten hinzufügen oder nicht?

6
itsme

Es hängt davon ab, wo Sie das Widget anzeigen möchten.

Beginnen wir mit der Registrierung des Widget-Bereichs (Seitenleiste):

add_action( 'wp_loaded', 'wpse_76959_register_widget_area' );
function wpse_76959_register_widget_area()
{
    register_sidebar(
        array (
            'name'          => __(
                'Widgets on page Sample Page',
                'theme_textdomain'
                ),
            'description'   => __(
                'Will be used on a page with a slug "sample-page" only.',
                'theme_textdomain'
                ),
            'id'            => 'sample-only',
            'before_widget' => '<div id="sample-only-widget">',
            'after_widget'  => '</div>',
            'before_title'  => '<h2>',
            'after_title'   => '</h2>',
        )
    );
}

Das ist ganz einfach. Wir registrieren einen neuen Widget-Bereich mit benutzerdefiniertem Markup.

enter image description here

Jetzt müssen wir es irgendwo zeigen. Wir könnten eine benutzerdefinierte Aktion in unsere page.php-Vorlage einfügen:

do_action( 'show_sample_widget' );

Oder wir könnten eine vorhandene Aktion verwenden, um die Orte einzuschränken, an denen das Widget verfügbar ist. Zum Beispiel wird die Aktion loop_start aufgerufen, wenn wir the_post() zum ersten Mal in einer Schleife aufrufen. Wenn wir das Widget oben auf den Seiteninhalt setzen möchten, verwenden wir diesen Hook:

add_action( 'loop_start', 'wpse_76959_render_widget' );

function wpse_76959_render_widget()
{
    is_page( 'sample-page' ) && dynamic_sidebar( 'sample-only' );
    remove_action( current_filter(), __FUNCTION__ );
}

Für eine benutzerdefinierte Aktion verwenden wir stattdessen:

add_action( 'show_sample_widget', 'wpse_76959_render_widget' );
7
fuxia

Es gibt verschiedene Plugins, mit denen Widgets basierend auf bestimmten Bedingungen angezeigt werden können:

  • Widgets anzeigen : Saubere und einfache Oberfläche
  • Widget-Kontext : Es hat ein paar mehr Optionen als die vorherige
  • Dynamische Widgets : Dies ist die reichste an Funktionen
  • Widget Logic : Dies richtet sich an Programmierer, da Sie die Bedingung in PHP Code schreiben müssen. Das heißt is_page('about')

Eine alternative Lösung bietet das folgende Plugin, mit dem Sie einen benutzerdefinierten Satz von Widgets auf Seitenbasis direkt über den Bildschirm "Seite bearbeiten" definieren können:

3
marcochiesi

Wenn Sie die Vorlagendateien für Ihr Thema bearbeiten möchten, gehen Sie wie folgt vor:

Finde wo

dynamic_sidebar('side_bar_name');

wird aufgerufen und entweder davor oder danach oder an einer anderen Stelle auf Ihrer Website verwendet:

$pageTitle =  get_the_title($post->ID); 
$targetPage = 'the title of the page you want to target goes here';

    if($pageTitle == $targetTitle){    
     the_widget( 'the_widget_unique_id_aka_name', $instance, $args);
    }
   //the_widget() calls a specific widget and displays it

Wenn Sie diesbezüglich sauberer sein möchten: Erstellen Sie in functions.php eine Funktion, die wie folgt aussieht:

function call_my_widget( $post ){
    $pageTitle =  get_the_title($post-ID); 
    $targetPage = 'the title of the page you want to target goes here';

        if($pageTitle == $targetTitle){    
         the_widget( 'the_widget_unique_id_aka_name', $instance, $args);
        }
}

rufen Sie die Funktion auf mit:

call_my_widget( $post );

dies muss in der Schleife oder dort aufgerufen werden, wo die globale Variable $post existiert.

Rufen Sie dann diese Funktion in Ihrer Vorlagendatei (page.php vielleicht?) Auf, um Ihre Ziel-Widgets nur auf Ihrer Zielseite anzuzeigen.

1
Vigs

Sie können widget_display_callback: https://developer.wordpress.org/reference/hooks/widget_display_callback/ verwenden und einfach die Seiten-ID im folgenden Code ändern.

function custom_display_callback( $instance, $widget, $args ){
    if( is_page( 10 ) ){
        return false;
    }
    return $instance;
}
add_filter( 'widget_display_callback', 'custom_display_callback', 50, 3 );

Ich hoffe das hilft. Prost!

0