Поддержка Проблемы и решения Как выводить различные посты в зависимости от категор

  • Плагин состоит из двух файлов: файл класса плагина и файл самого плагина. Есть таблица созданная при установке плагина. В файле класса плагина есть функция, которая вытягивает данные из это таблицы. Необходимо в конкретную категорию выводить данные из этой таблицы, а в остальных категориях все должно отображаться как обычно. Я использую вызов тег is_category(«7») с id нужной мне категории и добавляю фильтр the_content в основном файле плагина:

    <?php
    /*
    Plugin Name: plugin
    Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates
    Description: Plugin that loads portfolio list for category.
    Version: The Plugin's Version Number, e.g.: 1.0
    Author:
    Author URI: http://URI_Of_The_Plugin_Author
    */
    
    include_once( 'Plugin.class.php');
    ......
    
    if (is_category('7'))
       {
    
       add_filter( 'the_content', array($plugin, 'viewDataInSite')) ;
    
       }

    Но этот if не срабатывает, что я делаю не так, возможно прописываю is_category(‘7’) не в том месте. Подскажите пожалуйста.

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Попробуйте так:

    function add_viewDataInSite_filter($content) {
    	global $plugin;
    	if ( is_category('7') ) {
    		add_filter('the_content', array($plugin, 'viewDataInSite'));
    	}
    }
    add_action('wp', 'add_viewDataInSite_filter');

    Спасибо Вам большое, теперь все заработало. Но не могли бы Вы мне немножко объяснить по поводу action «wp», так как я пока не очень сильна в структуре WP. В документации написано следующее:

    Executes after the query has been parsed and post(s) loaded, but before any template execution, inside the main WordPress function wp. Useful if you need to have access to post data but can’t use templates for output. Action function argument: an array with a reference to the global $wp object.

    Правильно ли я поняла, что этот action срабатывает, когда выполнен запрос к БД и получены значения необходимых постов, но перед применением тегов для вывода? Где находится эта главная WordPress function wp и какой глобальный объект $wp здесь имеется в виду (в моем случае это экземпляр класса плагина = $plugin?).

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Насчёт срабатывания всё верно. Функция wp() определена в файле /wp-includes/functions.php. Глобальный объект $wp создаётся в wp-settings.php, это экземпляр класса WP из /wp-includes/classes.php.
    Экземпляр класса плагина в данном случае используется только внутри самой функции фильтра.

    Спасибо еще раз за предельно понятное объяснение. Только еще одно небольшое уточнение: в функции аdd_viewDataInSite_filter($content) параметр $content ведь может и отсутствовать?

    function add_viewDataInSite_filter($content) {
    	global $plugin;
    	if ( is_category('7') ) {
    		add_filter('the_content', array($plugin, 'viewDataInSite'));
    	}
    }
    add_action('wp', 'add_viewDataInSite_filter');

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Да, если функция не изменяет текущее содержимое, а формирует его сама.

    Все поняла, спасибо,вопрос закрыт.

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Тема «Как выводить различные посты в зависимости от категор» закрыта для новых ответов.