вернуть get_the_excerpt () из класса для нескольких выдержек из WordPress - PullRequest
0 голосов
/ 07 декабря 2010

Я изменял класс, который нашел в переполнении стека, для изменения длины выдержки из Wordpress. Это было неплохо (так как я новичок в ООП), но в конце концов он работает и теперь принимает 2-й параметр, чтобы отфильтровать ссылку «читать дальше». Что я хотел бы сделать, так это то, что в настоящее время выводом является 'the_excerpt', который немедленно выводит каждый раз, когда вызывается функция "my_excerpt ()". Я хотел бы добавить функцию с именем «get_my_excerpt», которая возвращает значение. Я знаю, что get_the_excerpt () делает именно это, но я не могу заставить его работать в этом классе.

  /* 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;
  }
}

1 Ответ

1 голос
/ 07 декабря 2010

Если вы не хотите переписывать или копировать-вставлять какой-либо код, я думаю, что этот код может помочь, код не изящен, но работает, просто добавьте эту функцию:

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

Я думаю, что лучший способ решить эту проблему - переписать некоторый код, например, использовать get_the_excerpt () вместо _excerpt () в статической функции output (), добавить соответствующий возврат в функцию Excerpt :: filter, добавьте эхо в функцию my_excerpt и, наконец, добавьте эту функцию:

function get_my_excerpt($length = 55, $more="[...]") {
  return Excerpt::filter($length, $more);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...