WordPress подсчитывает сообщения пользователей разных пользовательских типов сообщений

Я искал способ подсчета количества пользовательских сообщений, созданных пользователем, и смог сделать это с помощью этого фрагмента:

<?php

    $userid = get_current_user_id();

    function count_user_posts_by_type($userid, $post_type = 'foo_type', $post_status = 'publish') {

    global $wpdb; 
    $query = "SELECT COUNT(*) FROM $wpdb->posts WHERE post_author = $userid AND post_type = '$post_type' AND post_status = '$post_status'"; 
    $count = $wpdb->get_var($query); 
    return apply_filters('get_usernumposts', $count, $userid);

} ?>

И затем эхо результат:

<?php echo count_user_posts_by_type($userid); ?>

Мой вопрос: над кодом выводится только счет пользовательского типа сообщения «foo_type». Если у меня есть два пользовательских типа сообщений - «foo_type» и «bar_type» - как мне изменить этот код, чтобы он возвращал количество обоих из них, а не только количество «foo_type»?

1

6 ответы

Добавьте в запрос второй post_type:

$query = "SELECT COUNT(*) FROM $wpdb->posts WHERE post_author = $userid AND (post_type = '$post_type' OR post_type='$post_type_2') AND post_status = '$post_status'"; 
1
добавлено
Короткий, простой и работает. Я решил использовать это SQL-решение вместо того, чтобы изменять свою пользовательскую функцию, хотя оба выполняют эту работу.
добавлено автор Hassan, источник

Добавьте в запрос второй post_type:

$query = "SELECT COUNT(*) FROM $wpdb->posts WHERE post_author = $userid AND (post_type = '$post_type' OR post_type='$post_type_2') AND post_status = '$post_status'"; 
1
добавлено
Короткий, простой и работает. Я решил использовать это SQL-решение вместо того, чтобы изменять свою пользовательскую функцию, хотя оба выполняют эту работу.
добавлено автор Hassan, источник

Попробуйте выполнить пользовательскую функцию ниже

function my_count_posts_by_user($post_author=null,$post_type=array(),$post_status=array()) {
    global $wpdb;

    if(empty($post_author))
        return 0;

    $post_status = (array) $post_status;
    $post_type = (array) $post_type;

    $sql = $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->posts WHERE post_author = %d AND ", $post_author );

    //Post status
    if(!empty($post_status)){
        $argtype = array_fill(0, count($post_status), '%s');
        $where = "(post_status=".implode( " OR post_status=", $argtype).') AND ';
        $sql .= $wpdb->prepare($where,$post_status);
    }

    //Post type
    if(!empty($post_type)){
        $argtype = array_fill(0, count($post_type), '%s');
        $where = "(post_type=".implode( " OR post_type=", $argtype).') AND ';
        $sql .= $wpdb->prepare($where,$post_type);
    }

    $sql .='1=1';
    $count = $wpdb->get_var($sql);
    return $count;
} 

И затем эхо результат:

<?php echo my_count_posts_by_user($userid , array('posttype1' , 'posttype2')); ?>

Пожалуйста, посмотрите на url, указанный ниже ..

https: //wordpress.stackexchange. ком/вопросы/43549/кол-пользователи косяки-на-идентификатор пользователя-пост-типа и-пост-статус

благодаря

0
добавлено

Попробуйте выполнить пользовательскую функцию ниже

function my_count_posts_by_user($post_author=null,$post_type=array(),$post_status=array()) {
    global $wpdb;

    if(empty($post_author))
        return 0;

    $post_status = (array) $post_status;
    $post_type = (array) $post_type;

    $sql = $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->posts WHERE post_author = %d AND ", $post_author );

    //Post status
    if(!empty($post_status)){
        $argtype = array_fill(0, count($post_status), '%s');
        $where = "(post_status=".implode( " OR post_status=", $argtype).') AND ';
        $sql .= $wpdb->prepare($where,$post_status);
    }

    //Post type
    if(!empty($post_type)){
        $argtype = array_fill(0, count($post_type), '%s');
        $where = "(post_type=".implode( " OR post_type=", $argtype).') AND ';
        $sql .= $wpdb->prepare($where,$post_type);
    }

    $sql .='1=1';
    $count = $wpdb->get_var($sql);
    return $count;
} 

И затем эхо результат:

<?php echo my_count_posts_by_user($userid , array('posttype1' , 'posttype2')); ?>

Пожалуйста, посмотрите на url, указанный ниже ..

https: //wordpress.stackexchange. ком/вопросы/43549/кол-пользователи косяки-на-идентификатор пользователя-пост-типа и-пост-статус

благодаря

0
добавлено
$args = array(
    'post_type'=> 'page',
    'author'    => '1',
    'post_staus'=> 'publish',
    'posts_per_page' => -1
);
echo custom_count_post_by_author($args);
function custom_count_post_by_author($args){
    query_posts( $args );
    $count = 0;
    if ( have_posts() ) :
         while ( have_posts() ) : the_post();
            $count++;
         endwhile; 
    endif;
    wp_reset_query();
    return $count;
}

You can pass any Arguments in $args which support query_posts

0
добавлено
Хорошая пользовательская функция
добавлено автор user1749185, источник
$args = array(
    'post_type'=> 'page',
    'author'    => '1',
    'post_staus'=> 'publish',
    'posts_per_page' => -1
);
echo custom_count_post_by_author($args);
function custom_count_post_by_author($args){
    query_posts( $args );
    $count = 0;
    if ( have_posts() ) :
         while ( have_posts() ) : the_post();
            $count++;
         endwhile; 
    endif;
    wp_reset_query();
    return $count;
}

You can pass any Arguments in $args which support query_posts

0
добавлено
Хорошая пользовательская функция
добавлено автор user1749185, источник
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

WordPress – русскоговорящее сообщество
WordPress – русскоговорящее сообщество
768 участник(ов)

Группа пользователей популярнейшей CMS WordPress. Запрещено: мат и ругань реклама, спам (в т.ч. каналами) религия, политика, наркотики приглашение ботов без согласования #nowarez

WordPress for developers
WordPress for developers
761 участник(ов)

Группа для разработчиков wordpress Запрещено - мат - оскорбления - флуд - реклама ip телефония https://goo.gl/wBaqci Другие чаты Битрикс https://t.me/bitrixfordevelopers Битрикс работа https://t.me/bitrix_work

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp