Функция повторной обработки для подсчета количества сообщений типа post post post

Я пытаюсь перестроить мои встроенные сообщения, рассчитывая на функцию. Какой был бы лучший способ сделать это? Вот мой встроенный код:

$posts = get_posts('post_type=myposttype&customtaxonomy=mytax&posts_per_page=-1'); $posts_count = count($posts); echo $posts_count; 

В моих functions.php я пробовал это:

 function get_my_posts_count($mytaxonomy) { $mytaxonomy = get_posts('post_type=myposttype&$customtaxonomy=$mytaxonomy&posts_per_page=-1'); $mytaxonomy_posts_count = count($mytaxonomy); echo $mytaxonomy_posts_count; } 

После этого в файлах шаблонов я вызываю функцию, подобную этой

 <?php get_my_posts_count('taxonomyname');?> 

Solutions Collecting From Web of "Функция повторной обработки для подсчета количества сообщений типа post post post"

У вас есть пара проблем с кодом

  • customtaxonomy=$mytaxonomy неверна. Прежде всего, в get_posts нет параметра customtaxonomy . Во-вторых, ваш синтаксис неверен. Если вы используете varaible, ваш синтаксис должен выглядеть следующим образом:

     'post_type=myposttype&customtaxonomy=' . $mytaxonomy . '&posts_per_page=-1' 
  • Вы должны использовать правильный tax_query чтобы получать свои сообщения. Вы также должны использовать get_terms для получения всех условий выбранной таксономии

Вот как выглядит ваш код: ( Я также сделал запись типа переменной )

 function my_posts_count($taxonomy, $post_type) { $terms = get_terms( $taxonomy, 'fields=ids' ); $args = [ 'post_type' => $post_type, 'nopaging' => true, 'tax_query' => [ [ 'taxonomy' => $taxonomy, 'field' => 'term_id', 'terms' => $terms ] ], ]; $mytaxonomy = get_posts( $args ); $mytaxonomy_posts_count = count($mytaxonomy); echo $mytaxonomy_posts_count; } 

Обратите внимание: я использовал синтаксис, который не будет работать до PHP 5.4

Затем вы можете использовать код следующим образом

 my_posts_count('category', 'post'); 

РЕДАКТИРОВАТЬ

Переосмысление комментариев @birgire

Я считаю, что мы должны return счет, поскольку мы используем префикс get_ , хотя WordPress нарушает его собственное правило относительно этого соглашения о полу именовании

Я удалил префикс get_ из вашего имени функции. В WordPress функции, которые имеют префикс get_ возвращают свой вывод, а функции без префикса get_ echo выводятся

Правильный способ использования вашей функции при использовании префикса get_ выглядит следующим образом

 function get_my_posts_count($taxonomy, $post_type) { $terms = get_terms( $taxonomy, 'fields=ids' ); $args = [ 'post_type' => $post_type, 'nopaging' => true, 'tax_query' => [ [ 'taxonomy' => $taxonomy, 'field' => 'term_id', 'terms' => $terms ] ], ]; $mytaxonomy = get_posts( $args ); $mytaxonomy_posts_count = count($mytaxonomy); return $mytaxonomy_posts_count; } 

И в вашем шаблоне назовите это так

 echo get_my_posts_count('category', 'post'); 

В вашей функции у вас есть эта строка:

 $mytaxonomy = get_posts('post_type=myposttype&$customtaxonomy=$mytaxonomy&posts_per_page=-1'); 

Попробуйте изменить его на:

 $mytaxonomy = get_posts('post_type=myposttype&customtaxonomy=$mytaxonomy&posts_per_page=-1'); 

$customtaxonomy – переменная. customtaxonomy – параметр.