dla pewności, czy pytasz, czy wyświetlić całą treść swoich postów w kanale, a nie tylko podsumowanie, czy też dodać wszystkie strony (typ postu strony) do kanału w całości?
majick
@majick Chcę pokazać całą zawartość strony w kanale. Używam tego kodu również, ale zmiana wyniku zachodzi add_filter('request', 'feed_request'); function feed_request($qv){ $rss_post_types = array('post', 'page'); if(isset($qv['feed']) && !isset($qv['post_type'])) $qv['post_type'] = $rss_post_types; return $qv; }
raxa
na pierwszy rzut oka wygląda na to, że powinno działać dobrze, upewnij się, że wyłączyłeś wszystkie testowane wtyczki, a także wyłączasz pamięć podręczną podczas testowania.
majick
@majick z powodu powyższego kodu działa na stronie głównej. proszę sprawdzić tę stronę http://swissaudio.com/feed/Chcę pokazać zawartość każdej strony w kanale tzn. dla craftsmanshipstrony chciałbym zrobić coś takiego, http://swissaudio.com/craftsmanship/feed/ale nie pokazuje żadnego rezultatu
raxa
3
okazało się to bardzo trudne. Przetestowałem jeszcze kilka rzeczy bez powodzenia, więc otworzyłem nagrodę za to, ponieważ sam chciałbym poznać rozwiązanie. :-)
majick
Odpowiedzi:
7
Najpierw ustaw typ postu, aby wyświetlał się na głównej stronie kanału, tzn. /feedUżywając pre_get_postshaka
$q->set('post_type', array('post','page'));
Na poszczególnych stronach WordPress wyświetla kanał komentarzy, a następnie ustaw go falsei wyświetl zawartość strony w kanale.
$q->is_comment_feed =false;
W szablonie kanału wywołania WordPress, the_excerpt_rss()które wywołania, get_the_excerpt()więc za pomocą excerpt_lengthfiltra zmień długość na maks.
Kompletny przykład: -
add_action('pre_get_posts','wpse_227136_feed_content');/**
* Set post type in feed content and remove comment feed
* @param type $q WP Query
*/function wpse_227136_feed_content($q){//Check if it main query and for feedif($q->is_main_query()&& $q->is_feed()){//Set the post types which you want default is post
$q->set('post_type', array('post','page'));}//Check if it feed request and for single page if($q->is_main_query()&& $q->is_feed()&& $q->is_page()){//Set the comment feed to false
$q->is_comment_feed =false;}}
add_filter('excerpt_length','wpse_227136_excerpt_length',999);/**
* Filter the except length to full content.
*
* @param int $length Excerpt length.
* @return int $length modified excerpt length.
*/function wpse_227136_excerpt_length( $length ){if(is_feed()&&!get_option('rss_use_excerpt')){return PHP_INT_MAX;}return $length;}
ahh komentarze domyślnie na true. więc to jest to..! no cóż, wydaje się sensowne, aby zrobić to, /page/comments/feed/co faktycznie pokazałoby komentarze, jakiś pomysł, jak to zrobić?
majick
Myślę, że w tym celu musimy dodać nowe reguły przepisywania. Ponieważ WP domyślnie go nie obsługuje, zamiast tego obsługuje ciąg zapytania, withoutcomments=1na który odpowiada cjbj. W ogóle nie jestem dobry w przepisywaniu adresów URL: D
Sumit
1
co też nie jest dobre z przepisywaniem adresów URL, postanowiłem to odwrócić i dodać wsparcie dla withcomments=1mojej odpowiedzi.
majick
dla filtra długości fragment, nie powinien to sprawdzić get_option('rss_use_excerpt')nie !get_option('rss_use_excerpt), bo jeśli jest już fałszywe filtr długość fragment nie byłyby potrzebne, by wyświetlać już pełną zawartość. O_o
użycie return get_the_content_feed()byłoby lepsze, ponieważ stosuje the_contentrównież filtry ... ale niestety powoduje to wyświetlenie pełnej zawartości w polu opisu kanału zamiast w polu zawartości.
majick
3
Jak wspomniano w @Sumit, musisz wyłączyć kanał komentarzy dla strony (co wydaje mi się naprawdę dziwne, ponieważ domyślnie komentarze są wyłączone na stronach?) ... z tym skończyłem (pozwalając na otrzymywanie komentarzy do strony karmić, ?withcomments=1jeśli chcesz):
add_action('pre_get_posts','rss_page_feed_full_content');function rss_page_feed_full_content($q){// Check if it feed request and for single pageif($q->is_main_query()&& $q->is_feed()&& $q->is_page()){//Set the comment feed to false
$q->set('post_type', array('page'));// allow for page comments feed via ?withcomments=1if((isset($_GET['withcomments']))&&($_GET['withcomments']=='1')){return;}
$q->is_comment_feed =false;}}
Ale w celu wyświetlenia zawartości strony, ponieważ szablon pliku danych faktycznie sprawdza, rss_use_excerptczy wyświetlać pełny tekst czy podsumowanie (ustawione w Ustawieniach -> Czytanie strony), należy to zmienić, jeśli chcesz wyświetlić całą zawartość dla kanału strony ( dzięki czemu można ustawić główną opcję na dowolną dla postów.) W przeciwnym razie cokolwiek zrobisz, treść może skończyć się w polu opisu kanału zamiast w polu zawartości.
add_filter('pre_option_rss_use_excerpt','page_rss_excerpt_option');function page_rss_excerpt_option($option){// force full content output for pagesif(is_page()){return'0';}return $option;}
I na koniec, aby pole opisu RSS wyświetlało fragment strony, być może będziesz musiał to zrobić (co w zasadzie jest kopią „ wp_trim_excerptbez” strip_shortcodes) - cóż, i tak zrobiłem, ale może to być spowodowane dziwnym zachowaniem shortcode na stronie I testowałem:
add_filter('request', 'feed_request'); function feed_request($qv){ $rss_post_types = array('post', 'page'); if(isset($qv['feed']) && !isset($qv['post_type'])) $qv['post_type'] = $rss_post_types; return $qv; }
http://swissaudio.com/feed/
Chcę pokazać zawartość każdej strony w kanale tzn. dlacraftsmanship
strony chciałbym zrobić coś takiego,http://swissaudio.com/craftsmanship/feed/
ale nie pokazuje żadnego rezultatuOdpowiedzi:
Najpierw ustaw typ postu, aby wyświetlał się na głównej stronie kanału, tzn.
/feed
Używającpre_get_posts
hakaNa poszczególnych stronach WordPress wyświetla kanał komentarzy, a następnie ustaw go
false
i wyświetl zawartość strony w kanale.W szablonie kanału wywołania WordPress,
the_excerpt_rss()
które wywołania,get_the_excerpt()
więc za pomocąexcerpt_length
filtra zmień długość na maks.Kompletny przykład: -
źródło
/page/comments/feed/
co faktycznie pokazałoby komentarze, jakiś pomysł, jak to zrobić?withoutcomments=1
na który odpowiada cjbj. W ogóle nie jestem dobry w przepisywaniu adresów URL: Dwithcomments=1
mojej odpowiedzi.get_option('rss_use_excerpt')
nie!get_option('rss_use_excerpt)
, bo jeśli jest już fałszywe filtr długość fragment nie byłyby potrzebne, by wyświetlać już pełną zawartość. O_oTo może nie być idealne, ale to początek. Najpierw upewnij się, że cała zawartość znajduje się w kanale:
Powinieneś zobaczyć pełny kanał pod tym adresem URL
http://swissaudio.com/craftsmanship/feed/?withoutcomments=1
Następnie możesz użyć
add_rewrite_rule
do przekierowania odwiedzających z / feed /. Daleko od ideału, ale być może początek pracy dla kogoś innego.źródło
return get_the_content_feed()
byłoby lepsze, ponieważ stosujethe_content
również filtry ... ale niestety powoduje to wyświetlenie pełnej zawartości w polu opisu kanału zamiast w polu zawartości.Jak wspomniano w @Sumit, musisz wyłączyć kanał komentarzy dla strony (co wydaje mi się naprawdę dziwne, ponieważ domyślnie komentarze są wyłączone na stronach?) ... z tym skończyłem (pozwalając na otrzymywanie komentarzy do strony karmić,
?withcomments=1
jeśli chcesz):Ale w celu wyświetlenia zawartości strony, ponieważ szablon pliku danych faktycznie sprawdza,
rss_use_excerpt
czy wyświetlać pełny tekst czy podsumowanie (ustawione w Ustawieniach -> Czytanie strony), należy to zmienić, jeśli chcesz wyświetlić całą zawartość dla kanału strony ( dzięki czemu można ustawić główną opcję na dowolną dla postów.) W przeciwnym razie cokolwiek zrobisz, treść może skończyć się w polu opisu kanału zamiast w polu zawartości.I na koniec, aby pole opisu RSS wyświetlało fragment strony, być może będziesz musiał to zrobić (co w zasadzie jest kopią „
wp_trim_excerpt
bez”strip_shortcodes
) - cóż, i tak zrobiłem, ale może to być spowodowane dziwnym zachowaniem shortcode na stronie I testowałem:źródło
withoutcomments
teraz. WIDZĘwithcomment
: D LOL usuwam moje komentarze;)