Ondersteuning » Code oplossingen gezocht » Sorteer volgorde van de koppelingen widget instellen

  • Opgelost michaelhastrich

    (@michaelhastrich)


    Hi,

    Ik heb gebruik een widgitized sidebar met daarin de ‘Koppelingen’-widget. Nu wil ik de sorteer methode van de widget instellen op ranking. Nu weet ik dat dat kan met
    <?php wp_list_bookmarks = ( 'orderby' => 'rating') ?>
    Maar dat werkt , volgens mij, alleen hardcoded in een template, toch?

    Hoe kan ik dat in de widget instellen? Ik zelf denk aan iets in de functions.php, maar daar stopt het ook bij mij 🙂

    Iedere vorm van hulp wordt gewaardeerd.

    groeten,
    Michael

5 reacties aan het bekijken - 1 tot 5 (van in totaal 5)
  • De koppelingen-widget behoort tot de “core” van WordPress, dus daar blijf je af. Beter is om een standaard-widget nemen, zoals de tekst-widget. In die widget moet je op één of andere manier php scripts kunnen aanroepen. Dat kan op meerdere manieren: (i) een plugin die dat toestaat (php-exec bijv) of (ii) shortcodes. De shortcode-handler kan je definiëren in je functions.php bestand. Ik prefereer een nieuw bestand waarin je al je eigen functies zet, dat je met include_once() in je functions.php in scope brengt. Anders wordt het zo’n puinhoop. Shortcode is de beste oplossing omdat het het veiligst is (geen php in je widget of post) en je blog crasht niet als de shortcode handler verdwenen is (Bij een upgrade bijv).

    Voorbeelden
    Als je in wat voorbeelden bent geïnteresseerd: Op de blog staan een aantal schilderijen in eenvoudige text-widgets. Zij worden met shortcodes aangeroepen. In de tweede sidebar van rechts staat een opsomming van rubrieken (met figuur van appel en peer). Die (dat?) widget komt van een plugin (samsarin php) die php-code toelaat. Een voorbeeld van php-exec plugin vind je hier. Scroll helemaal naar beneden. Het (Ajax-gedreven) rekenmachientje staat op een apart php bestand dat met include_once() wordt aangeroepen. Zo blijft het bericht schoon en kan de php code apart worden getest.

    even off topic @ ad je voorbeeld site scrolled heeel erg in de breedte, misschien iets om naar te kijken.

    En on topic, wat Ad zegt, je kan ook zelf een soortgelijk iets in php schrijven, maar dan als compleet eigen script, gewoon in sidebar.
    In en uit schakelbaar per link x aantal links bijvoorbeeld.
    Is wel even werk, maar houd je ook altijd.

    Is wel ook een mogelijkheid.
    Maar wat Ad zegt is denk ik een betere optie, tenzij je dit prefereert.

    Ik ben een plugin aan het schrijven die deze widget toevoegt.
    Ik zal kijken of de links niet alleen op ‘rating’ gesorteerd kan worden in de Widget

    De plugin lijkt te werken.
    Je kan nog niet kiezen waarop je wilt sorteren. Dat is nu fixed op rating.
    Hier is de code. Zal kijken waar ik deze plugin kan uploaden voor andere liefhebbers.
    WHOOP-WHOOP! Created my first usable WordPress plugin!

    <?php
    /*
    Plugin Name: Links by rating Widget
    Description: Links ordered by rating in Widget
    Author: Jan-Willem van Veelen
    Version: 1.0
    Beta tester: Michael Hastrich
    */
    
      class WP_Widget_Links_By_Rating extends WP_Widget {
    
    	function WP_Widget_Links_By_Rating() {
    		$widget_ops = array( 'classname' => 'widget_Links_By_Rating', 'description' => __( "Show links in order of rating" ) );
    		$this->WP_Widget('linksByRating', __('Links By Rating 1.0'), $widget_ops);
    	}
    
    	function widget( $args, $instance ) {
    		extract($args, EXTR_SKIP);
    
    		$show_description = isset($instance['description']) ? $instance['description'] : false;
    		$show_name = isset($instance['name']) ? $instance['name'] : false;
    		$show_rating = isset($instance['rating']) ? $instance['rating'] : false;
    		$show_images = isset($instance['images']) ? $instance['images'] : true;
    		$category = isset($instance['category']) ? $instance['category'] : false;
    
    		if ( is_admin() && !$category ) {
    			// Display All Links widget as such in the widgets screen
    			echo $before_widget . $before_title. __('All Links') . $after_title . $after_widget;
    			return;
    		}
    		wp_list_bookmarks(array(
    			'title_before' => $before_title, 'title_after' => $after_title,
    			'category_before' => $before_widget, 'category_after' => $after_widget,
    			'show_images' => $show_images, 'show_description' => $show_description,
    			'show_name' => $show_name, 'show_rating' => $show_rating,
    			'category' => $category, 'class' => 'linkcat widget',
    			'orderby' => 'rating'
    		));
    	}
    
    	function update( $new_instance, $old_instance ) {
    		$new_instance = (array) $new_instance;
    		$instance = array( 'images' => 0, 'name' => 0, 'description' => 0, 'rating' => 0);
    		foreach ( $instance as $field => $val ) {
    			if ( isset($new_instance[$field]) )
    				$instance[$field] = 1;
    		}
    		$instance['category'] = intval($new_instance['category']);
    
    		return $instance;
    	}
    
    	function form( $instance ) {
    
    		//Defaults
    		$instance = wp_parse_args( (array) $instance, array( 'images' => false, 'name' => true, 'description' => false, 'rating' => false, 'category' => false ) );
    		$link_cats = get_terms( 'link_category');
    ?>
    		<p>
    		<label for="<?php echo $this->get_field_id('category'); ?>" class="screen-reader-text"><?php _e('Select Link Category'); ?></label>
    		<select class="widefat" id="<?php echo $this->get_field_id('category'); ?>" name="<?php echo $this->get_field_name('category'); ?>">
    		<option value=""><?php _e('All Links'); ?></option>
    		<?php
    		foreach ( $link_cats as $link_cat ) {
    			echo '<option value="' . intval($link_cat->term_id) . '"'
    				. ( $link_cat->term_id == $instance['category'] ? ' selected="selected"' : '' )
    				. '>' . $link_cat->name . "</option>\n";
    		}
    		?>
    		</select></p>
    		<p>
    		<input class="checkbox" type="checkbox" <?php checked($instance['images'], true) ?> id="<?php echo $this->get_field_id('images'); ?>" name="<?php echo $this->get_field_name('images'); ?>" />
    		<label for="<?php echo $this->get_field_id('images'); ?>"><?php _e('Show Link Image'); ?></label><br />
    		<input class="checkbox" type="checkbox" <?php checked($instance['name'], true) ?> id="<?php echo $this->get_field_id('name'); ?>" name="<?php echo $this->get_field_name('name'); ?>" />
    		<label for="<?php echo $this->get_field_id('name'); ?>"><?php _e('Show Link Name'); ?></label><br />
    		<input class="checkbox" type="checkbox" <?php checked($instance['description'], true) ?> id="<?php echo $this->get_field_id('description'); ?>" name="<?php echo $this->get_field_name('description'); ?>" />
    		<label for="<?php echo $this->get_field_id('description'); ?>"><?php _e('Show Link Description'); ?></label><br />
    		<input class="checkbox" type="checkbox" <?php checked($instance['rating'], true) ?> id="<?php echo $this->get_field_id('rating'); ?>" name="<?php echo $this->get_field_name('rating'); ?>" />
    		<label for="<?php echo $this->get_field_id('rating'); ?>"><?php _e('Show Link Rating'); ?></label>
    		</p>
    <?php
    	}
    }
    
    // Register the widget.
    add_action('widgets_init', create_function('', 'return register_widget("WP_Widget_Links_By_Rating");'));
    ?>

    Thread starter michaelhastrich

    (@michaelhastrich)

    Cool.
    Dit werkt voor mij voldoende.

    Muchas gracias.

5 reacties aan het bekijken - 1 tot 5 (van in totaal 5)
  • Het onderwerp ‘Sorteer volgorde van de koppelingen widget instellen’ is gesloten voor nieuwe reacties.