Індивідуальна довжина вхідного каналу для категорій?


9

Я знаю, як отримати канал rss2 з категорії в wp, а саме додавання /feedза назвою категорії. Однак, коли я це роблю, не всі записи з цього каналу включаються до rss, це тому, що я встановив обмеження каналу на 50 в архіві адміністратора.

Мені хотілося б знати, чи можна тривалість каналу встановити окремо для кожної категорії / каналу програмно.

Я не зміг знайти жодних параметрів api для розміру каналів ... будь-яка допомога тут вітається.

Спасибі за вашу допомогу.


Стівен Гарріс і CodeMonkey відповіді не працюють для однієї конкретної категорії? Інакше обидві відповіді працюють для мене! Чому може статися так, що він не працює лише для однієї категорії?
махатманіч

Відповіді:


8

Ви повинні бути в змозі використати pre_get_postsі встановити posts_per_page50 умовно (на час подачі для категорій). На жаль, є цей невирішений квиток на проїзд .

Єдина робота - це підключити безпосередньо post_limitsта замінити LIMITчастину запиту SQL.

add_action('post_limits','wpse71759_category_rss_limit',10,2);
function wpse71759_category_rss_limit($limit, $query){

     if( $query->is_feed() && $query->is_category() ){
          $paged =  $query->get('paged') ? (int) $query->get('paged') : 1;
          $per_page = 50;
          $page_start = ($paged-1)*$per_page;

          return "LIMIT $page_start, $per_page";
     }
     return $limit;
}

Ей, Стівен, я розберуся в цьому, насправді, я завжди хочу, щоб усі записи з категорії в каналі, і лише на своїй сторінці в блозі я хочу обмежити ліміт, який я встановив у бекенді, як би це зробити?
махатманіч

У такому випадку return "";замість цього "LIMIT $page_start, $per_page"слід робити.
Стівен Гарріс

Гей, ти можеш трохи пояснити свій код? Я не зовсім впевнений, що я хочу того, що ви тут пропонуєте.
mahatmanich

Тож для каналів категорій потрібно повернути всі публікації - тому ви не хочете LIMITчастину вашого запиту. Наведений вище фільтр дозволяє замінити LIMITчастину порожнім рядком, щоб отриманий sql отримав усі повідомлення.
Стівен Харріс

1
Так, але я б рекомендував зробити плагін із нього ( wpcandy.com/teaches/how-to-create-a-functionality-plugin )
Стівен Харріс

2
add_filter('query', 'sql_query_feed_filter');
function sql_query_feed_filter($sql){
    global $wp_query;

    if ($wp_query->is_feed == true &&  isset($wp_query->query_vars['custom_taxonomy']) &&  in_array($wp_query->query_vars['custom_taxonomy'], array('slug1','slug2')) ){
        if (strpos($sql, 'SELECT SQL_CALC_FOUND_ROWS') !== false){
            list($sql,) = explode('LIMIT', $sql);
        }
    }
    return $sql;
}

все, що вам потрібно зробити, це просто відредагувати цю функцію та скасувати таксономію за вашою категорією таксономії та відредагувати слизьку частину вашої категорії ...


Чи хотіли б ви пояснити свій код?
махатманіч

Простий фільтр SQL-запитів, який запускається на каналі ($ wp_query-> is_feed == true), якщо знайдена конкретна таксономія ($ wp_query-> query_vars ['custom_taxonomy'] custom_taxonomy, наприклад), і якщо вона є кількісною для якогось слугу ($ wp_query-> query_vars ['custom_taxonomy'] == 'slug'). якщо все це станеться і правдою (на site.com/your-custom-feed-for-category.xml), ви не отримаєте обмежених результатів у своєму каналі ($ SQL статтю поділено на значення LIMIT, що означає, що він повернувся без останнього LIMIT оператор ... без обмеження. Усі записи на rss.)
Олег Бутузов

Де я б скинув цей код? Функції.php моєї теми?
махатманіч

Функції.php досконало підходить. але раніше змінити слизу та назву спеціальної таксономії. та очистити кеш браузера перед тестуванням (RSS-канали, кешовані браузером).
Олег Бутузов

Гей, дякую за голову з кешем! Це працює, але все одно, принаймні в одній категорії, я не отримаю всіх публікацій у
стрічці
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.