2016-08-24 4 views
0

Следующий код запускается внутри плагина Facebook Instant Articles от Automattic. Это запрос, используемый для генерации RSS-канала, который facebook извлекает для мгновенных статей.Модифицировать логику Хукера: Wordpress и мгновенные статьи

function instant_articles_query($query) { 
    if ($query->is_main_query() && $query->is_feed(INSTANT_ARTICLES_SLUG)) { 
     $query->set('orderby', 'modified'); 
     $query->set('posts_per_page', 100); 
     $query->set('posts_per_rss', 100); 
     $settings_categories = Instant_Articles_Option_Categories::get_option_decoded(); 
     if($settings_categories['categories'] !== '') { 
      $query->set('cat', $settings_categories['categories']); 
     } 
     /** 
     * If the constant INSTANT_ARTICLES_LIMIT_POSTS is set to true, we will limit the feed 
     * to only include posts which are modified within the last 24 hours. 
     * Facebook will initially need 100 posts to pass the review, but will only update 
     * already imported articles if they are modified within the last 24 hours. 
     */ 
     if (defined('INSTANT_ARTICLES_LIMIT_POSTS') && INSTANT_ARTICLES_LIMIT_POSTS) { 
      $query->set('date_query', array(
       array(
        'column' => 'post_modified', 
        'after' => '1 day ago', 
       ), 
      )); 
     } 
    } 
} 
add_action('pre_get_posts', 'instant_articles_query', 10, 1); 

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

function mod_ia_query($query) { 

    $query->set('meta_query', array(
    array(
      'key' => 'is_instant_article', 
      'value' => true 
    ), 
    ); 


} 
add_action('instant_articles_query','mod_ia_query', 10, 1); 
+0

Плагин определяет крючок под названием 'instant_articles_query'? Похоже, вы просто использовали здесь имя функции, которое, конечно же, не сработает. Вы должны использовать тот же самый крючок, что и плагин - 'pre_get_posts' - с установленным приоритетом, чтобы он выполнялся после функции плагина. И вам нужно выполнить те же проверки, какой тип запроса он имеет, как и функция плагина, иначе вы будете манипулировать различными запросами, которые не имеют к этому никакого отношения. – CBroe

ответ

0

Я возвращаюсь, чтобы обновить это, но по сути то, что я сделал, было создать подкаталог в моей теме с именем из facebook мгновенных статей плагин и создать класс, который расширяет класс Instant_Articles.

Я отцепил add_action('pre_get_posts', 'instant_articles_query', 10, 1);

И добавил свой собственный метод к крюку, это выполняет свою функциональность в контексте плагина, но без непосредственного редактирования ядра файлов плагин.

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