2017-02-07 27 views
1

Я создаю тему одной страницы в WordPress с использованием Timber, но я немного новичок в этом, поэтому я немного потерял что-то, что, вероятно, довольно просто. Я просто хочу преобразовать ссылки на хеш-ссылки с фильтром, но я даже не могу заставить фильтр работать без ошибок (я просто получаю сломанный сайт, когда добавляю его, как показано ниже). Вот то, что мой functions.php выглядит в моей теме (конспект):Фильтр ссылок на листы на ссылках меню

class SIDSite extends TimberSite { 

     function __construct() { 
      add_theme_support('post-formats'); 
      add_theme_support('post-thumbnails'); 
      add_theme_support('menus'); 
      add_filter('timber_context', array($this, 'add_to_context')); 
      add_filter('get_twig', array($this, 'add_to_twig')); 
      add_action('init', array($this, 'register_post_types')); 
      add_action('init', array($this, 'register_taxonomies')); 
      add_filter('hash_link', array($this, 'hash_link')); // Added this 
      parent::__construct(); 
     } 

     function hash_link ($string) { // function I added, is probably not 100% right but I can't even debug it 
      if(substr($string, 0, 1) === '/') { 
       $string = substr($string, 1); 
      } 

      return '#' . $string; 
     } 
} 

А вот мой menu.twig файл:

{% if menu %} 
    <ul> 
    {% for item in menu %} 
     <li class="{{item.classes | join(' ')}}"> 
      <a href="{{item.path | hash_link}}">{{item.title}}</a> 
      {% include "menu.twig" with {'menu': item.get_children} %} 
     </li> 
    {% endfor %} 
    </ul> 
{% endif %} 

Я чувствую, что нужно продлить что-то другое, но добавлять мой фильтр весь сайт должен работать в моем сознании. Что я могу сделать, чтобы остановить это от сбоев моего сайта?

+0

Какая ошибка вы получаете? – DarkBee

ответ

1

Вы близки, проблема в том, что фильтры Twig полностью отделены от WP-фильтров, поэтому вам необходимо зарегистрировать yr-фильтр с помощью Twig, а не WordPress. Попробуйте это ...

function add_to_twig($twig) { 
    $twig->addFilter('hash_link', array($this, 'hash_link')); 
    return $twig; 
} 

function hash_link($string) {/
    if(substr($string, 0, 1) === '/') { 
     $string = substr($string, 1); 
    } 
    return '#' . $string; 
} 
+0

Спасибо за этот ответ, он указал мне в правильном направлении! Всего две вещи; Мне пришлось повторно добавить фильтр 'add_to_twig' в мою функцию' __construct', и мне пришлось немного изменить мою функцию; убедитесь, что фильтр является «Twig_SimpleFilter» и проверяет URL-адреса более тщательно, чтобы убедиться, что его можно использовать в более общем плане, но он работает сейчас. – ArtlyticalMedia