webentwicklung-frage-antwort-db.com.de

Ermittelt die Anzahl der benutzerdefinierten Beitragstypen, die vom aktuellen Benutzer erstellt wurden

Ich versuche, die Anzahl der veröffentlichten Beiträge in einem benutzerdefinierten Beitragstyp für den aktuellen Benutzer zu ermitteln (um sie auf einer Profilseite anzuzeigen).

Das habe ich hier im Forum gefunden:

<?php
global $wp_query;
$curauth = $wp_query->get_queried_object();
$post_count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_author = '" . $curauth->ID . "' AND post_type = 'user_video' AND post_status = 'publish'");
?>

Aber es gibt mir nur eine dicke NULL, obwohl es definitiv veröffentlichte Posts dieser Art gibt. Was mache ich falsch und gibt es einen besseren Weg, dies zu tun?

2
Eckstein

Ich poste eine neue Antwort, weil ich diesen Thread bei der Suche nach dem gleichen Thema gefunden habe und die Lösungen hier nicht optimal waren.

Das Argument post_type kann ein String oder ein Array von Post-Typen sein.

function custom_count_posts_by_author($user_id, $post_type = array('post', 'page'))
{
    $args = array(
        'post_type' => $post_type,
        'author'    => $user_id,
        'post_staus'=> 'publish',
        'posts_per_page' => -1
    );

    $query = new WP_Query($args);

    return $query->found_posts;
}
4
gyo

Ich würde vorschlagen, get_posts() anstelle von query_posts() für Ihren Zweck zu verwenden.

Erstellen Sie eine neue Instanz von WP_Query , oder verwenden Sie get_posts, um sekundäre Auflistungen zu erstellen (z. B. eine Liste verwandter Posts am Ende der Seite oder eine Liste von Links in einem Seitenleisten-Widget) () . [Quelle]

Es sieht jetzt auch einfacher aus :)

echo count( get_posts( array( 
    'post_type' => 'user_video', 
    'author'    => get_current_user_id(), 
    'nopaging'  => true, // display all posts
) ) );
5
Michal Mau

OK, nach mehr Googleing scheint dies zu funktionieren, ohne MySQL zu verwenden und direkt in die Datenbank einzutauchen:

<?php 
        $authorid = get_current_user_id();
        query_posts(array( 
            'post_type' => 'user_video',
            'author' => $authorid,
        ) ); 
            $count = 0;
            while (have_posts()) : the_post(); 
                $count++; 
            endwhile;
            echo $count;
        wp_reset_query();
    ?>
2
Eckstein

Im Autorenprofil für mich funktioniert das prima (ait-dir-item ist ein benutzerdefinierter Beitragstypname)

<?php  
$idecko = get_the_author_meta( 'ID' );
echo count_user_posts( $idecko, 'ait-dir-item' ); ?>     
1
Tomas

Sie müssen auch $ wpdb als global deklarieren und die Präfixmethode verwenden.

<?php
global $wp_query, $wpdb;
$curauth = $wp_query->get_queried_object();
$post_count = $wpdb->get_var("SELECT COUNT(ID) FROM ".$wpdb->prefix."posts WHERE post_author = '" . $curauth->ID . "' AND post_type = 'user_video' AND post_status = 'publish'");
?>
1
Andrew Bartel

https://codex.wordpress.org/Function_Reference/count_user_posts

<?php $user_post_count = count_user_posts( $userid , $post_type ); ?>