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!
-
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 mitdo_action( 'travelify_header' );
ein Hooktravelify_header
zur Verfügung gestellt.
In der Dateilibrary/structure/header-extensions.php
wird dieser Hook genutzt um (Zeile 37) eine Funktiontravelify_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 derfunctions.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 Argumentorderby
für die WP_Query() inrandom
änderst. Alternativ wäre auch eine Anpassung der JavaScript-Dateilibrary/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 duremove_action()
verwenden und dann deine eigene Funktion im Child Theme mitadd_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ü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 nichtIch 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 mitadd_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 Funktiontravelify_scripts_styles_method()
wird mitadd_action( 'wp_enqueue_scripts', 'travelify_scripts_styles_method' );
in Zeile 12 eingebunden. Du müsstest diese Funktion also erst einmal im Child Theme entkoppeln mitadd_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 dessenget_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 😀
- Das Thema „Travelify Slider immer anzeigen“ ist für neue Antworten geschlossen.