Support » Themes » Travelify Slider immer anzeigen

  • Hallo!
    Ich hänge seit langem an einem Problem fest und da ich nicht weiterkomme frage ich hier in die Runde, vielleicht hat jemand ja einen heißen Tipp für mich.

    Auf unserer Seite soll das Theme Travelify zum Einsatz kommen. An sich ist alles ganz schick und fertig, eine oder besser zwei Sachen störten aber doch ziemlich.
    Es geht um den Slider. Das ist eine tolle Möglichkeit finde ich! Möchte ihn aber gern anpassen, so dass:
    1. Er auf alles Seiten und nicht nur auf der Startseite sichtbar ist
    2. Die Bilder in zufälliger Reihenfolge angezeigt werden und nicht immer in statischer Reihenfolge.
    Ersteres ist eindeutig das wichtigste, das fehlt bevor die Seite online gehen kann. Denn so sehen alle anderen Seiten, außerd der Startseite echt blöd aus!

    Kann mir jemand bei diesem Vorhaben unter die Arme greifen?

    Danke und herzlich Grüße!

Ansicht von 10 Antworten - 1 bis 10 (von insgesamt 10)
  • Du hast sicherlich schon festgestellt, dass das Theme für deine Wünsche keine Einstellungsoption im Customizer bereit hält. Du musst also ein Child Theme erstellen und dort mit eigener Programmierung Änderungen/Ergänzungen vornehmen. Das setzt PHP-Kenntnisse voraus und ich bitte um Verständnis, dass ich auf Nachfragen zur Programmierung nicht weiter eingehen möchte, weil das für mich den zeitlichen Rahmen sprengt.

    Das Template header.php bietet eine Reihe von Hooks, über die zusätzliche Funktionen eingebunden werden können; u.a. wird dafür mit do_action( 'travelify_header' ); ein Hook travelify_header zur Verfügung gestellt.
    In der Datei library/structure/header-extensions.php wird dieser Hook genutzt um (Zeile 37) eine Funktion travelify_header_details einzubinden. In dieser Funktion wird wiederum ab Zeile 138ff geprüft, ob aktuell eine Startseite angezeigt und der Slider nicht im Customizer deaktiviert wurde.

    Wenn du nun im Template library/structure/header-extensions.php die Zeile 139 und in der functions.php die Zeile 50 mit dem if-Statement (und die zugehörige, schließende Klammer in Zeile 146 bzw. 52) entfernst bzw. auskommentierst, sollte der Slider auf jeder Seite angezeigt werden.

    Für eine zufällige Reihenfolge der angezeigten Beiträge musst du noch die Funktion travelify_featured_post_slider() anpassen, in dem du das Argument orderby für die WP_Query() in random änderst. Alternativ wäre auch eine Anpassung der JavaScript-Datei library/js/slider-settings.min.js möglich, eine Auflistung der Optionen des verwendeten jQuery-Plugins findest du hier: http://jquery.malsup.com/cycle/options.html. Allerdings müsstest du dann die alte JavaScript-Funktion entkoppeln und eine eigene einbinden, was vermutlich aufwändiger ist.

    Noch ein grundsätzlicher Hinweis: Während du Templates des Parent Theme in einem Child Theme duplizieren und dann anpassen kannst, dürfen Funktionsnamen immer nur einmal vorkommen, damit PHP zuordnen kann, welche Funktion gerade gemeint ist. Funktionen werden in WordPress mit add_action() über einen Hook eingebunden. Um sie zunächst zu entkoppeln, musst du remove_action() verwenden und dann deine eigene Funktion im Child Theme mit add_action() erneut einbinden (vgl. https://wordpress.stackexchange.com/a/276223).

    Nein, WordPress ist nicht einfach.

    Hallo Bego Mario Garde,

    vielen Dank für Deine so ausführliche Antwort und Hilfestellung!

    Ich habe mich gleich an den ersten Teil gemacht:

    Wenn du nun im Template library/structure/header-extensions.php die Zeile 139 und in der functions.php die Zeile 50 mit dem if-Statement (und die zugehörige, schließende Klammer in Zeile 146 bzw. 52) entfernst bzw. auskommentierst, sollte der Slider auf jeder Seite angezeigt werden.

    In der library/structure/header-extensions.php konnte ich die von dir beschriebenen Zeilen auch sofort finden und auskommentieren.
    Also diese:

    if( is_home() || is_front_page() ) {
    			if( "0" == $options[ 'disable_slider' ] ) {
    				if( function_exists( 'travelify_pass_cycle_parameters' ) )
       				travelify_pass_cycle_parameters();
       			if( function_exists( 'travelify_featured_post_slider' ) )
       				travelify_featured_post_slider();
       		}
       		}

    in der function.php bin ich allerdings etwas verwirrt…
    Ab Zeile 50 finde ich kein if-statement. Nur einen Kommentar.
    Meine function.php sieht so aus:

    <?php
    
    //Beginn eigener Code
    
    function beitragsbild_setzen() {
    
        global $post;
    
     
    
        $beitragsbild_vorhanden= has_post_thumbnail($post->ID);
    
        if (!$beitragsbild_vorhanden)  {
    
        $anhang = get_children( "post_parent=$post->ID&post_type=attachment&post_mime_type=image&numberposts=1" );
    
            if ($anhang) {
    
                foreach ($anhang as $anhang_id => $bild) {
    
                    set_post_thumbnail($post->ID, $anhang_id);
    
                }
    
            }
    
         }
    
    }
    
     
    
    add_action('the_post', 'beitragsbild_setzen');
    
    add_action('save_post', 'beitragsbild_setzen');
    
    add_action('draft_to_publish', 'beitragsbild_setzen');
    
    add_action('new_to_publish', 'beitragsbild_setzen');
    
    add_action('pending_to_publish', 'beitragsbild_setzen');
    
    add_action('future_to_publish', 'beitragsbild_setzen');
    
    /**
    
     * Adds custom classes to the array of body classes.
    
     *
    
     * @param array $classes Classes for the body element.
    
     * @return array
    
     */
    
    function theme_slug_body_classes( $classes ) {
    
        // Add no-sidebar class.
    
        if ( ! is_active_sidebar( 'sidebar' ) ) {
    
            $classes[] = 'no-sidebar';
    
        }
    
        return $classes;
    
    }
    
    add_filter( 'body_class', 'theme_slug_body_classes' );
    
    // End eigener Code
    
    // additional image sizes
    
    add_image_size( 'category-thumb', 200, 200 ); //300 pixels wide (and unlimited height)
    
    add_filter('widget_text', 'gibmirphp', 99);
    
    function gibmirphp($text) {
    
      if (strpos($text, '<' . '?') !== false) {
    
        ob_start();
    
         eval('?' . '>' . $text);
    
         $text = ob_get_contents();
    
        ob_end_clean();
    
      }
    
      return $text;
    
    }
    
    function derLoop($atts, $content = null) {
    
    extract(shortcode_atts(array(
    
    "pagination" => 'true',
    
    "query" => '',
    
    "category" => '',
    
    ), $atts));
    
    global $wp_query,$paged,$post;
    
    $temp = $wp_query;
    
    $wp_query= null;
    
    $wp_query = new WP_Query();
    
    if($pagination == 'true'){
    
    $query .= '&paged='.$paged;
    
    }
    
    if(!empty($category)){
    
    $query .= '&category_name='.$category;
    
    }
    
    if(!empty($query)){
    
    $query .= $query;
    
    }
    
    $wp_query->query($query);
    
    ob_start();
    
    ?>
    
    <h2><?php echo $category; ?></h2>
    
    <ul class="loop">
    
    <?php while ($wp_query->have_posts()) : $wp_query->the_post(); ?>
    
    <li><a href="<?php the_permalink() ?>" rel="bookmark"><?php echo $thumbnail_image; the_title(); ?></a></li>
    
    <?php endwhile; ?>
    
    </ul>
    
    <?php if($pagination == 'true'){ ?>
    
    <div class="navigation">
    
    <div class="alignleft"><?php previous_posts_link('« zur&uuml;ck') ?></div>
    
    <div class="alignright"><?php next_posts_link('weiter »') ?></div>
    
    </div>
    
    <?php } ?>
    
    <?php $wp_query = null; $wp_query = $temp;
    
    $content = ob_get_contents();
    
    ob_end_clean();
    
    return $content;
    
    }
    
    add_shortcode("loop", "derLoop");
    
    /**
    
     * Travelify defining constants, adding files and WordPress core functionality.
    
     *
    
     */
    
    /**
    
     * Set the content width based on the theme's design and stylesheet.
    
     */
    
    if ( ! isset( $content_width ) ) {
    
    	$content_width = 700;
    
    }
    
    if ( ! function_exists( 'travelify_setup' ) ):
    
    	add_filter( 'widget_text', 'do_shortcode' );
    
    	/**
    
    	 * Sets up theme defaults and registers support for various WordPress features.
    
    	 */
    
    	add_action( 'after_setup_theme', 'travelify_setup' );
    
    	/**
    
    	 * Note that this function is hooked into the after_setup_theme hook, which runs
    
    	 * before the init hook. The init hook is too late for some features, such as indicating
    
    	 * support post thumbnails.
    
    	 *
    
    	 */
    
    	function travelify_setup() {
    
    		/**
    
    		 * travelify_add_files hook
    
    		 *
    
    		 * Adding other addtional files if needed.
    
    		 */
    
    		do_action( 'travelify_add_files' );
    
    		/* Travelify is now available for translation. */
    
    		require( get_template_directory() . '/library/functions/i18n.php' );
    
    		/** Load functions */
    
    		require( get_template_directory() . '/library/functions/functions.php' );
    
    		/** Load WP backend related functions */
    
    		require( get_template_directory() . '/library/panel/themeoptions-defaults.php' );
    
    		require( get_template_directory() . '/library/panel/metaboxes.php' );
    
    		require( get_template_directory() . '/library/panel/show-post-id.php' );
    
    		/** Load Shortcodes */
    
    		require( get_template_directory() . '/library/functions/shortcodes.php' );
    
    		/** Load WP Customizer */
    
    		require( get_template_directory() . '/library/functions/customizer.php' );
    
    		/** Load Structure */
    
    		require( get_template_directory() . '/library/structure/header-extensions.php' );
    
    		require( get_template_directory() . '/library/structure/sidebar-extensions.php' );
    
    		require( get_template_directory() . '/library/structure/footer-extensions.php' );
    
    		require( get_template_directory() . '/library/structure/content-extensions.php' );
    
    		// /** TGMPA */
    
    		// require( get_template_directory() . '/library/tgmpa/tgm-plugin-activation.php' );
    
    		/**
    
    		 * travelify_add_functionality hook
    
    		 *
    
    		 * Adding other addtional functionality if needed.
    
    		 */
    
    		do_action( 'travelify_add_functionality' );
    
    		// Add default posts and comments RSS feed links to head
    
    		add_theme_support( 'automatic-feed-links' );
    
    		// This theme uses Featured Images (also known as post thumbnails) for per-post/per-page.
    
    		add_theme_support( 'post-thumbnails' );
    
    		// This theme uses wp_nav_menu() in header menu location.
    
    		register_nav_menu( 'primary', __( 'Primary Menu', 'travelify' ) );
    
    		// Add Travelify custom image sizes
    
    		add_image_size( 'featured', 200, 200 );
    
    		add_image_size( 'featured-medium', 230, 230 );
    
    		add_image_size( 'slider', 1200, 200, true );        // used on Featured Slider on Homepage Header
    
    		add_image_size( 'gallery', 474, 342, true );                // used to show gallery all images
    
    		// This feature enables WooCommerce support for a theme.
    
    		add_theme_support( 'woocommerce' );
    
    		/**
    
    		 * This theme supports custom background color and image
    
    		 */
    
    		$args = array(
    
    			'default-color' => '#d3d3d3',
    
    			'default-image' => get_template_directory_uri() . '/images/background.png',
    
    		);
    
    		add_theme_support( 'custom-background', $args );
    
    		/*
    
    		 * Let WordPress manage the document title.
    
    		 * By adding theme support, we declare that this theme does not use a
    
    		 * hard-coded <title> tag in the document head, and expect WordPress to
    
    		 * provide it for us.
    
    		 */
    
    		add_theme_support( 'title-tag' );
    
    		/**
    
    		 * This theme supports add_editor_style
    
    		 */
    
    		add_editor_style();
    
    	}
    
    endif; // travelify_setup
    
    ?>

    Hast Du da noch einmal einen Tipp für mich?

    Viele Grüße

    Schau mal hier:

    https://themes.trac.wordpress.org/browser/travelify/3.0.4/library/functions/functions.php#L50

    es geht nicht um die functions.php im Stammverzeichnis des Themes, sondern in /library/functions – das hatte ich missverständlich ausgedrückt, sorry.

    Ah, danke!
    Jetzt habe ich alles gefunden 🙂
    Allerdings wird der Slider so auf keiner Seite angezeigt…?!?

    Hast du nur die Zeile

    if( ( is_home() || is_front_page() ) && "0" == $options[ 'disable_slider' ] ) {

    und die dazugehörige schließende Klammern entfernt, oder auch den Code dazwischen?

    ARG, wie blöd von mir, bitte entschuldige, da habe ich nicht ordentlich gelesen!
    Das tut mir Leid.
    Jetzt ist der Slider auf alles Seiten sichtbar! Danke!

    Allerdings slidet er nicht mehr, also die Bilder ändern sicht nicht, es bleibt beim ersten Bild… ?

    Wenn dein Slider nicht mehr slidet, hast du wahrscheinlich das JavaScript kaputt gemacht. Gibt es Fehlermeldungen in den Entwickler-Tools deines Browsers? Z.B. 404 für nicht korrekt eingebundenes JavaScript?

    Ich habe mich blöd ausgedrückt glaube ich.
    Der Slider slidet noch auf der Startseite (so wie „früher“), aber auf den anderen Seiten nicht

    Ich verliere da ein wenig den Überblick.

    Änderst du denn jetzt Code im Theme selbst oder hast du ein Child Theme erstellt? Wenn du im Theme Änderungen vornimmst, werden sie beim nächsten Theme-Update überschrieben. Wenn du ein Child Theme erstellst, musst du im Grunde erst einmal die bisherige Einbindung des JavaScript aufheben (remove_action())und dann im Child Theme mit add_action() neu einbinden.

    Wenn du ein git-Repository hättest, könnte ich mir das anschauen. Aber ohne Code lässt sich das kaum beurteilen, was du da jetzt gemacht hast.

    Nachtrag: ich hab mir die Datei library/functions/functions.php gerade nochmal angeschaut. Die Funktion travelify_scripts_styles_method() wird mit add_action( 'wp_enqueue_scripts', 'travelify_scripts_styles_method' ); in Zeile 12 eingebunden. Du müsstest diese Funktion also erst einmal im Child Theme entkoppeln mit

    add_action( 'init', 'remove_action_travelify_scripts_styles');
    function remove_action_travelify_scripts_styles() {
         remove_action( 'wp_enqueue_scripts', 'travelify_scripts_styles_method',9 );
    }

    Danach kannst du dann mit
    add_action( 'wp_enqueue_scripts', 'child_travelify_scripts_styles_method' );
    eine eigene Funktion einbinden, bei der du den Code des Parent Theme wie besprochen anpasst:

    …
    /**
     * Enqueue Slider setup js file.
     * Enqueue Fancy Box setup js and css file.
     */
    if( "0" == $options[ 'disable_slider' ] ) {
    	wp_enqueue_script( 'travelify_slider', get_template_directory_uri() . '/library/js/slider-settings.min.js', array( 'jquery_cycle' ), false, true );
    }
    …

    Achte darauf, dass hier mit get_template_directory_uri() die JavaScript-Datei im Parent-Theme aufgerufen wird. Wenn du eine eigene JavaScript-Datei mit eigenen Optionen für den Slider einbinden möchtest, muss statt dessen get_stylesheet_directory_uri() verwendet werden.

    Ich weiß, alles nicht so einfach …

    Hallo Bego Mario Garde,

    sorry, ich wollte Dich wirklich nicht nerven 🙂
    War jetzt ein paar Tage nicht im Büro, werde mich aber in nächster Zeit mal wieder daran setzen. Dann gehe ich noch einmal ganz genau, Schritt für Schritt durch, was du geschrieben hast. Vielleicht komme ich dann ja weiter 😉
    Auf jeden Fall vielen Dank für Deine Hilfe bis hierher 😀

Ansicht von 10 Antworten - 1 bis 10 (von insgesamt 10)
  • Das Thema „Travelify Slider immer anzeigen“ ist für neue Antworten geschlossen.