v23 fredag – kodexempel – skapa en shortcode som listar en användares favourites

Idag har vi använt vår nya OOP struktur för plugins för att lägga till en shortcode som visar en inloggad användares favoritmarkerade inlägg. Vi utgick från user-favourites-oop-namespaced pluginnen som vi gick igenom tillsammans under dagen.

Här kan du ladda ner dagens kod

Uttdrag av ändringar

src: /classes/Content.class.php

// new add_shortcode() in the __construct()
public function __construct() {
    // setup our action filter, and shortcode callbacks
    add_action('wp_enqueue_scripts', array($this, 'enqueue_scripts'));
    add_filter('the_content', array($this, 'the_content'));
    add_shortcode('user-favourites', array($this, 'shortcode'));
}

[...]

// new method shortcode()
public function shortcode($attrs) {
    /*
      we are building
      <ul class="list-group">
        <li class="list-group-item">Cras justo odio</li>
        [...]
      </ul>
    */
    // get the users favourites
    $this->model = new Model();
    $favourites = $this->model->get();

    $list_items = '';
    if (empty($this->model->user->ID)) {
      // user is not logged in!
      $list_items = '<li class="list-group-item">Please log in!</li>';
    } else if ($favourites === NULL || empty($favourites)) {
      // user is logged in, but has no favourites
      $list_items = '<li class="list-group-item">No favourites!</li>';
    } else {
      // user has favourites!
      foreach ($favourites as $fav) {
        // get the post
        $p = get_post($fav);
        // get post link
        $l = get_permalink($fav);

        // build a list item
        $list_items .= '<li class="list-group-item">'.
                         '<a href="'.$l.'">'.$p->post_title.'</a>'.
                       '</li>';
      }
    }

    // combine everything into a list-group UL,
    // and return it!
    return '<ul class="list-group">' . $list_items .'</ul>';
}
0 votes