2010-12-07 32 views
0

J'ai modifié une classe trouvée sur Stack Overflow pour varier la longueur de l'extrait de Wordpress. Il a été un ours (depuis que je suis nouveau à OOP) mais il fonctionne finalement et accepte un deuxième paramètre maintenant pour filtrer le lien de lire plus. Ce que je voudrais faire, c'est que la sortie est actuellement 'the_excerpt' qui est immédiatement répercutée sur la fonction "my_excerpt()". Je voudrais ajouter une fonction appelée "get_my_excerpt" qui retourne la valeur. Je sais que get_the_excerpt() fait exactement cela, mais je n'arrive pas à le faire fonctionner dans cette classe.return get_the_excerpt() d'une classe pour plusieurs extraits wordpress

/* Class that enables excerpt length parameter */ 
/* called via my_excerpt('length') */ 

class Excerpt { 

    // Default length (by WordPress) 
    public static $length = 55; 

    // Default more (by WordPress) 
    public static $more = "[...]"; 

    // So you can call: my_excerpt('short'); 
    public static $types = array(
     'short' => 25, 
     'regular' => 55, 
     'long' => 100, 
     'xlong' => 200, 
    ); 

    // So you can call: my_excerpt('short'); 
    public static $more_types = array(
     'none' => "", 
     'regular' => "[...]", 
     'ellipse' => "...", 
     'permalink' => 'skip', 
    ); 




    /** 
    * Sets the length for the excerpt, 
    * then it adds the WP filter 
    * And automatically calls the_excerpt(); 
    * 
    * @param string $new_length 
    * @return void 
    * @author Baylor Rae' 
    */ 
    public static function filter($new_length = 55, $new_more="[...]", $echo=TRUE) { 
    Excerpt::$length = $new_length; 
    Excerpt::$more = $new_more; 

    add_filter('excerpt_length', 'Excerpt::new_length',98); 
    add_filter('excerpt_more', 'Excerpt::new_more',99); 

    return Excerpt::output(); 

    } 

    // Tells WP the new length 
    public static function new_length() { 
    if(isset(Excerpt::$types[Excerpt::$length])) 
     return Excerpt::$types[Excerpt::$length]; 
    else 
     return Excerpt::$length; 
    } 

    // Tells WP the new more 
    public static function new_more() { 

    $db = new ReadMore; 

    if(isset(Excerpt::$more_types[Excerpt::$more]) AND ((Excerpt::$more_types[Excerpt::$more]) != "skip")) 
     return Excerpt::$more_types[Excerpt::$more]; 
    elseif(isset(Excerpt::$more_types[Excerpt::$more]) AND ((Excerpt::$more_types[Excerpt::$more]) == "skip")) 
     return $db->readmore(); 
    else 
     return Excerpt::$more; 
    } 

    // Echoes out the excerpt 
    public static function output() { 
    return get_the_excerpt(); 
    } 



} 

// An alias to the class 
function get_my_excerpt($length = 55, $more="[...]") { 
    return Excerpt::filter($length, $more); 
} 

// An alias to the class 
function my_excerpt($length = 55, $more="[...]") { 
    echo get_my_excerpt($length, $more); 
} 


class ReadMore { 
    private $title; 
    private $permalink; 
    private $more; 


    public function __construct() { 
    //$this->title = get_the_title(); 
    //$this->permalink = get_permalink(); 
    $temp = "..." . '<a class="readmore" title="'. _('Permalink to').get_the_title() . '" href=" ' . get_permalink() . '">'._('Read the rest').'</a>'; 
    $this->more = $temp; 

    } 
    public function readmore() {  
    return $this->more; 
    } 
} 

Répondre

1

si vous ne voulez pas de réécrire ou de copier-coller du code Je pense que ce code pourrait aider, le code est élégant mais fonctionne, il suffit d'ajouter cette fonction:

function get_my_excerpt($length = 55, $more="[...]") { 
    ob_start(); 
    Excerpt::filter($length, $more); 
    $my_excerpt = ob_get_contents(); 
    ob_end_clean(); 
} 

I supposez qu'une meilleure façon de résoudre ceci est de réécrire du code, par exemple, utilisez get_the_excerpt() au lieu de the_excerpt() dans la fonction statique output(), ajoutez le retour correspondant dans la fonction Excerpt :: filter, ajoutez un écho dans la fonction my_excerpt et enfin ajouter cette fonction:

function get_my_excerpt($length = 55, $more="[...]") { 
    return Excerpt::filter($length, $more); 
} 
+0

OUI! fait ce que vous avez dit, plus le retour sur la sortie statique() et maintenant cela fonctionne. J'ai corrigé mon code dans le message d'origine pour refléter vos modifications. Je vous remercie! – helgatheviking