header 中显示的高级自定义字段简码

Advanced Custom Field shortcode displaying in header

希望你们中的一些人能帮助我,因为我真的迷路了!这很难解释,但就是这样。我最近是 ACF(高级自定义字段)的新手,所以请原谅我。

设置:

1. 我在我的 functions.php 文件中创建了一个新的短代码(称为 [bier])

`    function bierfunction() {
require_once trailingslashit( REDGOTGRILL_THEME_DIR ) . 'bier-page.php';
}
add_shortcode('bier','bierfunction');`

2. 然后我创建了 php 文件 "bier-page.php" 如上导入。并添加了一些电话:

`    <?php $bier_maand = new WP_Query(array(
'post_type' => 'bier_maand'
)); ?>`

`    <div class="mprm-row">
      <?php while($bier_maand->have_posts()) : $bier_maand->the_post();?>     </div>`

`     <div class="mprm-category-content">
                     <h2 class="mprm-title"><?php the_title(); ?></h2>
                             <p class="mprm-category-description">
                            <?php the_field('beschrijving_bier'); ?></p>
                        </div>`

3. 然后我希望我可以在任何页面中使用短代码,它会插入我创建的 php 页面!好吧,它有效!真的很好,甚至...除了一件事!

问题:我创建的短代码显示在我 header 下方的最顶部。不管我做什么!或者我放在上面的任何东西!它将继续显示在页面顶部 header 下方。

结论:我要出去window了!我究竟做错了什么??这是 CSS 样式问题吗?因为我觉得这与 ACF 调用有关:
<?php $bier_maand = new WP_Query(array( 'post_type' => 'bier_maand' )); ?>

任何帮助将不胜感激!!!!

在此先致谢!

Afaik,你必须从你的简码函数中 return html。如果你 include/require 它,它会被放置在某个地方。对于您的示例(未经测试!!):

function bierfunction() {
  $bier_maand = new WP_Query(array(
    'post_type' => 'bier_maand'
  ));

$ret = '<div class="mprm-row">';
while($bier_maand->have_posts()) $ret.=$bier_maand->the_post();
$ret.='</div>';

$ret.='<div class="mprm-category-content"><h2 class="mprm-title">';
$ret.=the_title(); 
$ret.='</h2><p class="mprm-category-description">';
$ret.=php the_field('beschrijving_bier'); 
$ret.='</p></div>';
return $ret;
}
add_shortcode('bier','bierfunction');`

你很接近,@jh1711 已步入正轨。您的短代码显示在 while( have_posts() ) : the_post(); 调用的最顶部,因为它是 打印 您的标记,而不是 返回 它作为变量显示在简码处。简码有效,但没有在正确的地方输出。您需要将其更改为:

<?php
function bierfunction(){
  // No need for WP_Query - use get_posts when you can
  $bier_maand = get_posts( array(
    'post_type' => 'bier_maand'
  ) );
  $ret = '<div class="mprm-row">';
  foreach( $bier_maand as $bier ){
    $ret .= '<div class="mprm-category-content"><h2 class="mprm-title">';
    // Not the_title() which prints the title. Use get_the_title() to pass it to your variable.
    $ret .= get_the_title( $bier->ID );
    $ret .='</h2><p class="mprm-category-description">';
    // Don't use the_field() which prints the field value. Use get_field() to pass the value to your variable;
    $ret .= get_the_field( 'beschrijving_bier', $bier->ID ); 
    $ret .= '</p></div>';
  }
  $ret .= '</div>';
  // Return the value of the above output so WordPress puts in on screen at the location of your shortcode.
  return $ret;
}
add_shortcode( 'bier', 'bierfunction' );