Как переопределить ограничение канала синдикации WP Admin для пользовательского канала?

#php #wordpress #feed #syndication

#php #wordpress #канал #синдикация

Вопрос:

Мне нужно переопределить настройку в WP Admin для количества последних сообщений в настройках синдикации в разделе Общие -> Администратор.

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

 function no_limits_for_feed( $limits ) {
    return '';
}

add_filter( 'post_limits', 'no_limits_for_feed' );
  

ОБНОВЛЕНИЕ: Вот пример кода, который я использую, который взят из плагина Feed JSON WordPress:

 class feed_json {
    function feed_json() {
        global $wp_rewrite;

        add_action('init', array(amp;$this, 'add_feed_json'));
        add_action('do_feed_json', array(amp;$this, 'do_feed_json'), 10, 1);
        add_filter('template_include', array(amp;$this, 'template_json'));
        add_filter('query_vars', array(amp;$this, 'add_query_vars'));

        $plugin_basename = plugin_basename(__FILE__);
        add_action('activate_' . $plugin_basename, array(amp;$this, 'add_feed_json_once'));
        add_action('deactivate_' . $plugin_basename, array(amp;$this, 'remove_feed_json'));
    }

    function add_feed_json_once() {
        global $wp_rewrite;
        $this->add_feed_json();
        $wp_rewrite->flush_rules();
    }

    function remove_feed_json() {
        global $wp_rewrite;
        $feeds = array();
        foreach ( $wp_rewrite->feeds as $feed ) {
            if ( $feed !== 'json' ) {
                $feeds[] = $feed;
            }
        }
        $wp_rewrite->feeds = $feeds;
        $wp_rewrite->flush_rules();
    }

    function add_query_vars($qvars) {
      $qvars[] = 'callback';
      $qvars[] = 'limit';
      return $qvars;
    }

    function add_feed_json() {
        add_feed('json', array(amp;$this, 'do_feed_json'));
    }

    function do_feed_json() {
        load_template($this->template_json(dirname(__FILE__) . '/feed-json-template.php'));
    }

    function template_json( $template ) {
        $template_file = false;
        if (get_query_var('feed') === 'json') {
            $template_file = '/feed-json.php';
            if (function_exists('get_stylesheet_directory') amp;amp; file_exists(get_stylesheet_directory() . $template_file)) {
                $template_file = get_stylesheet_directory() . $template_file;
            } elseif (function_exists('get_template_directory') amp;amp; file_exists(get_template_directory() . $template_file)) {
                $template_file = get_template_directory() . $template_file;
            } elseif (file_exists(dirname(__FILE__) . '/feed-json-template.php')) {
                $template_file = dirname(__FILE__) . '/feed-json-template.php';
            } else {
                $template_file = false;
            }
        }

        return (
            $template_file !== false
            ? $template_file
            : $template
            );
    }
}
new feed_json();
  

Ответ №1:

Я думал, вы могли бы подключиться к pre_get_posts , но если это канал, posts_per_page значение позже перезаписывается. Поэтому просто подключитесь к post_limits , проверьте наличие своего канала и при необходимости верните другую LIMIT часть.

 add_filter( 'post_limits', 'so6230475_post_limits', 10, 2 );
function so6230475_post_limits( $limits, amp;$wp_query )
{
    if ( $wp_query->is_feed( 'json' ) ) {
        $limits = 'LIMIT 50';
    }
    return $limits;
}
  

Комментарии:

1. Можете ли вы сказать мне, как установить флаг для «/ * проверять наличие вашего специального канала * /»?

2. @Zoolander: Это зависит от того, как вы создали канал. Можете ли вы дополнить свой вопрос информацией о том, как вы это сделали, а также кодом?

3. @Jan Fabry: Я обновил свой исходный пост кодом, а также включил ссылку на плагин, который я использую. Спасибо!

4. @Zoolander: Если вы добавляете дополнительный тип канала, вы можете просто написать if ( $wp_query->is_feed( 'json' ) ) , что будет верно только в том случае, если это канал и если он относится к типу json .

5. @Jan Fabry: Я добавил это в оператор IF, однако он по-прежнему возвращает только 5 результатов для канала. У меня в «Лентах синдикации отображаются самые последние» установлено значение 5 в моем WP Admin и posts_per_page в functions.php установлено значение 100. Есть идеи?