2014-01-02 4 views
0

Привет, новый и счастливый новый год.Wordpress is_single вызов из конструктора класса плагинов

В последнее время я работаю над плагином, и я застрял на этапе создания экземпляра класса плагина.

Вот что я получил в главном файле:

<?php 

class Filter_Content { 

public function __construct() { 
    if(!is_front_page() && !is_home() && !is_single()) return; 
    if(!is_singular(array('post','page'))) return; 

    add_filter('the_content', array(&$this, 'manage_page_content')); 
} 


public function manage_page_content($content) { 

    global $post; 
    $content_enabled = get_post_meta($post->ID, 'post_content_enabled', true); 

    if(!$content_enabled) { 
     $content = ''; 
    } 

    return $content; 
} 

} 

$filtercontent = new Filter_Content(); 

?> 

Однако когда на метод конструктора is_single() или is_home() называются они не работают, , когда я двигаюсь, если заявления в метод, который они работают нормально. Причина, по которой я должен переместить инструкции if в конструктор, заключается в том, что будет больше методов, которые будут использовать эти утверждения.

+0

Что вы имеете в виду, они «не работают»? Что это делает, что составляет нерабочее состояние? Вы получаете ошибки? Можете ли вы показать нам ошибки? – maiorano84

+0

Hi maiorano84, под этим я имею в виду, что ошибки не было, даже подсказки. У меня ошибка отладки wp-config.php true. Поэтому, не работая, я имею в виду, что пока я нахожусь на одном посту, он не возвращает истинное значение всегда ложным. – mentorgashi

+0

Это может быть проблема с порядком операций. Плагины настроены до большинства остальных, и глобальный объект '$ wp_query', возможно, не был создан на этом этапе, чтобы вы имели смысл использовать' is_single() 'или' is_singular() '. Попробуйте создать экземпляр 'Filter_Content' в обратном вызове' init'. – maiorano84

ответ

3

Дайте это попробовать, добавил примечания к коду

public function __construct() { 

    // Plugins are loaded before themes so you need to fire this when theme template is loading EG wp_head hook 
    add_action('wp_head', array(&$this, 'filter_check')); 
} 


public function filter_check() { 
    if(!is_front_page() && !is_home() && !is_single()) return; 
    if(!is_singular(array('post','page'))) return; 

    add_filter('the_content', array(&$this, 'manage_page_content')); 
} 
+0

Hi topdown, ваше решение сильно помогло: D – mentorgashi

+0

После того, как я добавил фильтр заголовка тоже, и теперь ваш фильтр теперь фильтрует в заголовке, затрагивает контент wp_nav, он вытирает их всех, его та же концепция, что и фильтр для контента , Вы не знаете, что может привести к этому? – mentorgashi

+0

Если это то же самое, что и ваш метод manage_page_content, проверьте, является ли его тип post первым, если ($ post-> post_type == 'post') {// Ваш код} – topdown

Смежные вопросы