web-dev-qa-db-ja.com

Authors.phpファイルでユーザーのカスタム投稿タイプを表示する方法を教えてください。

これが私が持っているコードです。キャンペーンとして知られる100個のカスタム投稿を表示しています。現在のユーザーのみを表示するために必要です。だから作者/ジョーはジョーのキャンペーンだけを見せるべきです。

  <?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

query_postsを使用しないでください。そのため、メインクエリの代わりにカスタムクエリを使用してください。それは常に問題があり、それを解決するより多くの問題を生み出します。

メインクエリを使用し、必要に応じてメインクエリを変更するためにpre_get_postsを使用します。

あなたの問題を解決するために、query_posts行を削除してください、これは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; ?>

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' );

    }

});

これであなたの問題は解決するはずです

3
Pieter Goosen

WP_Queryを使用して問題が発生しません...
これは作者パラメータを持ちます。

$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();

お役に立てれば。

0
Sagive SEO