dream518518518 2015-12-08 20:15
浏览 69
已采纳

为什么我不能将自定义字段变量传递给Wordpress数组中的'numberposts'变量?

I'm going crazy here - I can't figure out why this doesn't work!

I have a wordpress template with multiple queries to show different post types.

I am able to do this no problem:

 $showfeatposts = "1";
$args = array(
'numberposts'     => $showfeatposts,
'orderby'         => 'post_date',
'order'           => 'DESC',
'post_type'       => 'post',
'cat'             => '58',
'post_status'     => 'publish',
'suppress_filters' => true 
);

Which passses the value of "1" into the 'numberposts' variable.

What I NEED to do is instead replace that value of "1" with a value passed from a custom field in the admin panel so that the administrator can enter the number of posts they want to show.

When I change my code instead to this:

$showarticleposts =  the_field('articles-posts-to-show');
$args = array(
'numberposts'     => $showarticleposts,
'orderby'         => "post_date",
'order'           => 'DESC',
'post_type'       => 'post',
'cat'             => '5, -58',
'post_status'     => 'publish',
'suppress_filters' => true 
);

I get all posts returned, as if the value being entered is '-1'

I've verified that the actual value in the custom field is '2' by enchoing it on the page.

What am I doing wrong? Surely this should be possible?

For reference: Here's the page.

ETA: I've also tried this method from an ACF tutorial - still doesn't work:

$args = array(
'numberposts'     => get_field('showarticleposts'),
'orderby'         => "post_date",
'order'           => 'DESC',
'post_type'       => 'post',
'cat'             => '5, -58',
'post_status'     => 'publish',
'suppress_filters' => true 

ETA2: In response to the answer below - I have also tried this option:

$showarticleposts =  get_field('showarticleposts');

$args = array(
'numberposts'     => $showarticleposts,
'orderby'         => "post_date",
'order'           => 'DESC',
'post_type'       => 'post',
'cat'             => '5, -58',
'post_status'     => 'publish',
'suppress_filters' => true 
);

And if I put this code on the page - it does echo the number '2':

<?php echo get_field('showarticleposts'); ?>

Per request - here is the full page of code - I have tried to clean it up as much as possible - you will undoubtably notice the weird coding for the reports section, I am taking this over from someone who used Types to create the custom fields and custom post types. But I am using ACF custom fields for my attempt to add the ability to choose how many of each post-type to show on the homepage:

section id="content" role="main" class="clearfix animated">

    <?php
    /**
     * If Featured Image is uploaded set it as a background
     * and change page title color to white
    **/
    if ( has_post_thumbnail() ) {
        $page_image_url = wp_get_attachment_image_src( get_post_thumbnail_id(), 'big-size' );
        $page_bg_image = 'style="background-image:url(' . $page_image_url[0] . ');"';
        $title_with_bg = 'title-with-bg';
    } else {
        $title_with_bg = 'wrapper title-with-sep';
    } ?>

   <!--<header class="entry-header page-header">
     <div class="page-title <?php echo isset( $title_with_bg ) ? $title_with_bg : ''; ?>" <?php echo isset( $page_bg_image ) ? $page_bg_image : ''; ?>>
            <div class="wrapper">
                <h1 class="entry-title"><?php the_title(); ?></h1>
            </div> 
        </div>
    </header>-->

    <div class="wrapper">
    <div class="grids">
            <div class="grid-8 column-1">
        <?php
        // Enable/Disable sidebar based on the field selection
        if ( ! get_field( 'page_sidebar' ) || get_field( 'page_sidebar' ) == 'page_sidebar_on' ):
        ?>

        <?php endif; ?>

            <?php 
            if (have_posts()) : while (have_posts()) : the_post();
            ?>
            <div class="page-content">
           <?php the_content(); ?>
           </div>

 <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

 <?php  $showfeatposts = "1";
$args = array(
'numberposts'     => $showfeatposts,
'orderby'         => 'post_date',
'order'           => 'DESC',
'post_type'       => 'post',
'cat'             => '58',
'post_status'     => 'publish',
'suppress_filters' => true 
);

$featposts = get_posts( $args );

foreach( $featposts as $post ) :  //setup_postdata($ppost); 
setup_postdata( $post );  ?>

    <div class="col-md-12 recent feat" id="recent">
     <figure class="entry-image inview">
      <?php if ( has_post_thumbnail() ) { ?>
      <a href="<?php the_permalink(); ?>">
       <?php the_post_thumbnail( 'rectangle-size-large' ); ?></a>
     <?php } ?>
 </figure>
        <header class="entry-header">
         <div class="entry-category">
          <?php the_author_posts_link(); ?> / <?php the_time('F jS, Y'); ?> </div>  
             <h2 class="entry-title" itemprop="headline">
             <a href="<?php echo get_permalink($post->ID); ?>"><?php echo $post->post_title; ?></a>
            </h2>
        </header>
 <div class="entry-content">
  <?php echo apply_filters("the_content", $post->the_excerpt) ; ?>
</div>
<div class="entry-category">
<span class="posted-on">By 
<span class="author vcard"><?php the_author_posts_link(); ?></span></span>
</div>
</div>
<?php 
$pnum++;
endforeach; ?>
    </article>

   <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
     <div class="col-md-12 homehdr">
     <header class="section-header">
    <div class="title-with-sep">
    <h2 class="title">Recent Articles</h2>
    </div>
   </header>
   </div>

  <?php $showarticleposts = "4";

$args = array(
'numberposts'     => $showarticleposts,
'orderby'         => "post_date",
'order'           => 'DESC',
'post_type'       => 'post',
'cat'             => '5, -58',
'post_status'     => 'publish',
'suppress_filters' => true 
);

$artposts = get_posts( $args );

foreach( $artposts as $post ) :  //setup_postdata($ppost); 
 setup_postdata( $post );  ?>                   

         <div class="col-md-6 recent arts" id="arts">
           <figure class="entry-image inview">
              <?php if ( has_post_thumbnail() ) { ?>
                    <a href="<?php the_permalink(); ?>">
                        <?php the_post_thumbnail( 'rectangle-size' ); ?>
                    </a>
            <?php } ?></figure>
          <header class="entry-header">
         <div class="entry-category">
         <?php the_author_posts_link(); ?> / <?php the_time('F jS, Y'); ?></div>  
        <h2 class="entry-title" itemprop="headline">
          <a href="<?php echo get_permalink($post->ID); ?>"><?php echo $post->post_title; ?></a>
         </h2>
   </header>
   <div class="entry-content">
 <?php if ($post->post_excerpt) the_excerpt();  else { ?>
 <?php $content = apply_filters("the_content", $post->post_content);
 $content = strip_tags($content); 
 echo substr($content, 0, 100); }
  ?></div>
<div class="entry-category">
<span class="posted-on">By 
<span class="author vcard"><?php the_author_posts_link(); ?></span></span>
</div>
</div>
<?php 
$pnum++;
endforeach; ?>
</article>

<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
    <div class="col-md-12 homehdr">
     <header class="section-header">
    <div class="title-with-sep">
    <h2 class="title">Recent Videos</h2>
    </div>
        </header>
        </div>
      <?php    $showvideoposts = "2";

$args = array(
'numberposts'     => $showvideoposts,
'orderby'         => 'post_date',
'order'           => 'DESC',
'post_type'       => 'post',
'cat'             => '3, -58',
'post_status'     => 'publish',
'suppress_filters' => true 
);

$vidposts = get_posts( $args );


foreach( $vidposts as $post ) :  //setup_postdata($ppost); 
 setup_postdata( $post );  ?>

                   <div class="col-md-6 recent vids">
    <?php $video_embed = wp_oembed_get( get_post_meta( $post->ID, 'add_video_url', true ) ); echo '<figure class="video-wrapper">' .$video_embed. '</figure>';  ?>

       <header class="entry-header">
        <div class="entry-category">
          <?php the_author_posts_link(); ?> / <?php the_time('F jS, Y'); ?> </div>  
         <h2 class="entry-title" itemprop="headline">
          <a href="<?php echo get_permalink($post->ID); ?>"><?php echo $post->post_title; ?></a>
       </h2>
  </header>
  <div class="entry-content">

<?php echo $post->the_content; ?>
</div>
    <div class="entry-category">
<span class="posted-on">By 
<span class="author vcard"><?php the_author_posts_link(); ?></span></span>
</div>
</div>
<?php 
$pnum++;
endforeach; ?>
                </article>


 <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
 <div class="col-md-12 homehdr">
  <header class="section-header">
    <div class="title-with-sep">
        <h2 class="title">Recent Notes</h2>
    </div>
        </header>
        </div>
                <?php
                $shownoteposts = "2";
$args = array(
'numberposts'     => $shownoteposts,
'orderby'         => 'post_date',
'order'           => 'DESC',
'post_type'       => 'post',
'cat'             => '42',
'post_status'     => 'publish',
'suppress_filters' => true 
);

$noteposts = get_posts( $args );

foreach( $noteposts as $post ) :  //setup_postdata($ppost); 
 setup_postdata( $post );  ?>

        <div class="col-md-6 recent notes">

        <header class="entry-header">
      <div class="entry-category">
      <?php the_author_posts_link(); ?> / <?php the_time('F jS, Y'); ?>

</div>  
     <h2 class="entry-title" itemprop="headline">
  <a href="<?php echo get_permalink($post->ID); ?>"><?php echo $post->post_title; ?></a>
     </h2>
     </header>
     <div class="entry-content">

<?php echo apply_filters("the_excerpt", $post->the_excerpt) ; ?>
</div>
    <div class="entry-category">
<span class="posted-on">By 
<span class="author vcard"><?php the_author_posts_link(); ?></span></span>
</div>
</div>
<?php 
$pnum++;
endforeach; ?>
                </article>


<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
               <div class="col-md-12 homehdr">
                <header class="section-header">
      <div class="title-with-sep">
        <h2 class="title">Recent Reports</h2>
    </div>
        </header>
        </div>
                <?php
                $showreports =  get_field('showreports');

$args = array(
'numberposts'     => $showreports,
'orderby'         => 'post_date',
'order'           => 'DESC',
'post_type'       => 'reports',
'post_status'     => 'publish',
'suppress_filters' => true 
);

$reptposts = get_posts( $args );

foreach( $reptposts as $post ) :  //setup_postdata($ppost); 
 setup_postdata( $post );  ?>

  <div class="col-md-6 recent rpts">
   <h2 class="report-title" itemprop="headline">
    <a href="<?php echo get_permalink($post->ID); ?>">
   <?php  echo(types_render_field("first-name", array('raw' => true))); echo(" ");
      echo(types_render_field("last-name", array('raw' => true))); ?></a>
          </h2>
         <p><strong>Posted by:</strong> <a href="<?php echo get_author_posts_url(get_the_author_meta('ID')); ?>" class="url fn n"  rel="author" itemprop="url">
    <span itemprop="name"><?php the_author_meta('display_name'); ?>
</span></a>  on <?php
$publish_date = '<time class="entry-date updated" datetime="' . get_the_time( 'c' ) . '" itemprop="datePublished">' . get_the_time( get_option( 'date_format' ) ) . '</time>';  echo $publish_date; ?><br />
    <strong>Dates Seen:</strong>  
<?php,$dates_seen = types_render_field("dates-seen", array('raw' => true)); echo($dates_seen); ?>
<br /> 
<strong>Affiliate:</strong>  
<?php echo(types_render_field("milb", array('raw' => true)));
<br />
   <strong>MLB Team</strong>
   <?php  echo(types_render_field("mlb-club", array('raw' => true))); ?>
     </p>
  </div>
<?php 
$pnum++;
endforeach; ?>
  </article>

 <?php endwhile; endif; ?>       

      <?php 
            // Enable/Disable comments
            if ( $ti_option['site_page_comments'] == 1 ) {
                comments_template();
            } ?>

            <?php
            // Enable/Disable sidebar based on the field selection
            if ( ! get_field( 'page_sidebar' ) || get_field( 'page_sidebar' ) == 'page_sidebar_on' ): ?>

</div>
            <?php get_sidebar(); ?>

        </div><!-- .grids -->
        <?php endif; ?>

    </div>
</section><!-- #content -->

<?php get_footer(); ?>
  • 写回答

1条回答 默认 最新

  • doudui5753 2015-12-08 21:19
    关注

    the_field(), by definition, will echo out the value of the field onto the page and NOT store it inside a variable... instead you want to do this:

    $showarticleposts =  get_field('articles-posts-to-show');
    $args = array(
        'numberposts'     => $showarticleposts,
        'orderby'         => "post_date",
        'order'           => 'DESC',
        'post_type'       => 'post',
        'cat'             => '5, -58',
        'post_status'     => 'publish',
        'suppress_filters' => true 
    );
    

    To make sure it's getting what you want, do: var_dump( $showarticleposts ); and see if a 2, as you claim it should be, is being dumped on the page. Your third example "should" work, but you are using a different "field" name in each of your examples, so it's hard to tell if 'showarticleposts' or 'articles-posts-to-show' is the actual field name.

    UPDATE

    Since looking at your code... I have noticed that you are using setup_postdata( $post );. While this is a great thing to use, it's changing your global $post variable, and therefore when you call get_field() it is using the $post->ID of the "changed" $post variable, which is not what you want. You want the original $post->ID of the page you are currently viewing. So, simply add wp_reset_postdata(); after every custom loop you've created and it should fix the issue.

    UPDATE 2 Since you mention it is STILL not working, the only other thing I can think of is to set a variable to the original page id at the very top of the page...

    $current_page_id = get_the_ID();
    

    Then when you call get_field(), include that id:

    $showarticleposts = get_field( 'articles-posts-to-show', $current_page_id );
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分