Модератор
Юрій
(@yube)
Так все-таки postmeta или пользовательский тип записи?
Подавляющее большинство задач по модификации выборки решается использованием обработчика хука ‘pre_get_posts’
Матчасть: https://developer.wordpress.org/reference/hooks/pre_get_posts/
Как-то так:
add_filter('pre_get_posts', function($query) {
if ($query->is_feed) {
// доп.условия
}
return $query;
});
Юрий
Спасибо, что откликнулись.
Значение произвольного поля я имел в виду. Т.е. если в записи вставлено rss-on и значение 1, то показывать её в RSS ленте (и другие записи, где тоже вставлено в в произвольное поле значение rss-on и значение 1).
Т.е. фильтр этот только для RSS ленты. Я гуглил-перегуглил и всё, что я нашёл, это:
Исключение из фида постов имеющих произвольно поле
add_filter( 'posts_where', 'exclude_special_posts_from_feed' );
function exclude_special_posts_from_feed($where){
// Выходим если это не фид.
if( ! is_feed() || ! is_main_query() )
return $where;
global $wpdb;
$where .= " AND $wpdb->posts.ID NOT IN (
SELECT distinct(post_id) from $wpdb->postmeta
where $wpdb->postmeta.meta_key = 'exclude_from_feed'
) ";
return $where;
}
Но тут исключение, если есть определённая запись «произвольного поля». А мне необходимо наоборот — исключение всех и включение ТОЛЬКО тех, что имеют конкретную запись произвольного поля. Такая кастомная RSS ленточка получается в итоге.
Как это можно сделать?
Я ещё крайне активно поискал и нашёл вот этот код:
// Loop starts here
while (have_posts()) : the_post();
// Get the meta field
$meta = get_post_meta($post->ID, "Meta Name", false);
// Do no show post if the meta equals "Meta Value"
if($meta != "Meta Value"){
// Content Here
}
endwhile;
// Loop ends
И в файле feed-rss2.php узрел вот этот код, куда вроде как можно его вписать:
while ( have_posts() ) :
the_post();
?>
<item>
<title><?php the_title_rss(); ?></title>
<link><?php the_permalink_rss(); ?></link>
<?php if ( get_comme...
...
.....ments_number(); ?></slash:comments>
<?php endif; ?>
<?php rss_enclosure(); ?>
<?php
/**
* Fires at the end of each RSS2 feed item.
*
* @since 2.0.0
*/
do_action( 'rss2_item' );
?>
</item>
<?php endwhile; ?>
Как его правильно отредактировать (в приведённом выше коде при наличии записи произвольного поля возникает исключение, но можно же сделать обратный алгоритм, вроде для этого восклицательный знак надо убрать?) и вписать в приведённый далее код формирования RSS ленты? И да, при написании статьи, в меню ввода произвольного поля что нужно вписывать в Имя и Значение что бы сработало.