web-dev-qa-db-fra.com

Comment afficher un type de publication personnalisé pour les utilisateurs dans le fichier authors.php?

Voici le code que j'ai. Il montre 100 post personnalisé appelé campagnes. J'en ai besoin pour ne montrer que les utilisateurs actuels. Donc, l'auteur/joe devrait seulement montrer les campagnes de joe.

  <?php

   if(isset($_GET['author_name'])) :

    $curauth = get_userdatabylogin($author_name);

    else :

    $curauth = get_userdata(intval($author));

     endif;

     ?>




<h2>Campaigns by <?php echo $curauth->nickname; ?>:</h2>



<?php
$args = array(
'posts_per_page' => 100,
'post_type' => 'campaigns'

  );
query_posts($args);
if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

    <li>

        <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link: <?php the_title(); ?>">

        <?php the_title(); ?></a>,



    </li>


<?php endwhile; else: ?>

    <p><?php _e('No posts by this author.'); ?></p>


<?php endif; ?>
1
JediTricks007

N'utilisez pas query_posts, et d'ailleurs aucune requête personnalisée ne remplacera la requête principale. C'est toujours problématique et cela crée plus de problèmes que de le résoudre.

Utilisez la requête principale et utilisez pre_get_posts pour modifier la requête principale selon vos besoins.

Pour résoudre votre problème, supprimez la ligne query_posts, voici à quoi devrait ressembler author.php.

<?php

   if(isset($_GET['author_name'])) :

        $curauth = get_userdatabylogin($author_name);

    else :

        $curauth = get_userdata(intval($author));

    endif;

?>

<h2>Campaigns by <?php echo $curauth->nickname; ?>:</h2>

<?php

if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

    <li>

        <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link: <?php the_title(); ?>">

        <?php the_title(); ?></a>,



    </li>


<?php endwhile; else: ?>

    <p><?php _e('No posts by this author.'); ?></p>


<?php endif; ?>

Ajoutez ce qui suit dans votre fichier functions.php

add_action( 'pre_get_posts', function ( $q ) {

    if( !is_admin() && $q->is_main_query() && $q->is_author() ) {

        $q->set( 'posts_per_page', 100 );
        $q->set( 'post_type', 'campaigns' );

    }

});

Cela devrait résoudre votre problème

3
Pieter Goosen

Je ne vois pas le problème d'utilisation de WP_Query ...
Il a un paramètre auteur.

$cuser_id = get_current_user_id();

$args = array(
    'post_type'         =>  'campaigns',
    'posts_per_page'    =>  100,
    'author'            =>  $cuser_id,

);
$the_query = new WP_Query($args);

if ($the_query->have_posts()) {
    while ($the_query->have_posts()) {
        $the_query->the_post();

        // BUILD AND DISPLY CAMPAIGN DATA
        $pid    =   get_the_ID();
        $ptitle =   get_the_title();
        $plink  =   get_permalink();

        echo '<li><a href="'.$plink.'">'.$ptitle.'</a></li>';

    }

} else {
    echo 'You have published any campaigns yet';
}
wp_reset_postdata();

J'espère que cela t'aides.

0
Sagive SEO