有关短码功能的帮助

时间:2018-06-22 作者:Evaluation Unit

我希望比我更了解PHP和WordPress的人能帮助我解决这个问题。我有一个自定义的帖子类型,其中显示的帖子使用以下代码:

<?php $args = array( \'post_type\' => \'upcoming_event\', \'posts_per_page\' => 3 );
 $loop = new WP_Query( $args );
  while ( $loop->have_posts() ) : $loop->the_post();
   echo \'<div class="upcomingevents">\';
   echo \'<h4>\';
   the_title();
   echo \'</h4>\';
   echo \'<div class="upcomingeventimage">\';
   the_post_thumbnail(\'medium\');
   echo \'</div>\';
   echo \'<div class="upcoming-event-entry-content">\';
   the_content();
   echo \'</div>\';
   echo \'</div>\';
  endwhile;
 wp_reset_postdata();
?>
虽然这在php文件中可以很好地工作,但我也尝试通过短代码轻松访问它。我制作了短代码,短代码也可以使用,但每次我将其放在页面/帖子上并单击“更新”或“发布”,它都会将我发送到一个打印有此内容的页面(并且只打印此内容)。。。但它仍然保存了它,并且在我保存它的页面上仍然显示良好。我知道我遗漏了一些东西,但我对PHP非常熟悉,不知道它是什么。

以下是我的短代码:

// Shortcode for Upcoming Events
function upcoming_events_shortcode() {
  $args = array( \'post_type\' => \'upcoming_event\', \'posts_per_page\' => 3 );
  $query = new WP_Query( $args );
  while ( $query->have_posts() ) : $query->the_post();
        echo \'<div class="upcomingevents">\';
        echo \'<h4>\';
        the_title();
        echo \'</h4>\';
        echo \'<div class="upcomingeventimage">\';
        the_post_thumbnail(\'medium\');
        echo \'</div>\';
        echo \'<div class="upcoming-event-entry-content">\';
        the_content();
        echo \'</div>\';
        echo \'</div>\';
  endwhile;
 wp_reset_postdata();
}

add_shortcode(\'upcoming-events\', \'upcoming_events_shortcode\');
谢谢你的帮助!我一边学习,一边做这个,通常我可以用谷歌搜索出大多数东西,但不是这一个。在上面抓我的头。

2 个回复
最合适的回答,由SO网友:felipelavinz 整理而成

短代码应该返回字符串,而不是回显数据。。。因此,这里有两个选项之一:

将“echo”内容的所有echo语句和所有函数更改为与return一起使用(将所有内容串联在一个字符串上,然后返回它)

  • 使用输出缓冲,对于输出缓冲,您的代码将如下所示:

    function upcoming_events_shortcode() {
      $args = array( \'post_type\' => \'upcoming_event\', \'posts_per_page\' => 3 );
      $query = new WP_Query( $args );
      ob_start();
      while ( $query->have_posts() ) : $query->the_post();
            echo \'<div class="upcomingevents">\';
            echo \'<h4>\';
            the_title();
            echo \'</h4>\';
            echo \'<div class="upcomingeventimage">\';
            the_post_thumbnail(\'medium\');
            echo \'</div>\';
            echo \'<div class="upcoming-event-entry-content">\';
            the_content();
            echo \'</div>\';
            echo \'</div>\';
      endwhile;
     wp_reset_postdata();
     return ob_get_clean();
    }
    
    这样,所有echo\'ed内容都将被输出缓冲区捕获。

  • SO网友:Andy Macaulay-Brook

    Shortcode函数需要返回字符串,而不是回显输出。

    只需将所有echo语句更改为字符串串联,并使用返回而不是回显其结果的函数:

    // Shortcode for Upcoming Events
    function upcoming_events_shortcode() {
        $args = array( \'post_type\' => \'upcoming_event\', \'posts_per_page\' => 3 );
        $query = new WP_Query( $args );
        while ( $query->have_posts() ) : $query->the_post();
            $output = \'<div class="upcomingevents">\';
            $output .= \'<h4>\';
            $output .= get_the_title();
            $output .= \'</h4>\';
            $output .= \'<div class="upcomingeventimage">\';
            $output .= get_the_post_thumbnail(\'medium\');
            $output .= \'</div>\';
            $output .= \'<div class="upcoming-event-entry-content">\';
            $output .= get_the_content();
            $output .= \'</div>\';
            $output .= \'</div>\';
        endwhile;
        wp_reset_postdata();
    
        return $output;
    }
    
    add_shortcode(\'upcoming-events\', \'upcoming_events_shortcode\');
    
    警告:我已经添加了get_ 无需测试即可实现功能。检查WP文档,确保功能之间没有任何差异。

    阅读关于短代码的开发人员文档,了解如何包含属性,以便您可以改变帖子的数量。

    结束

    相关推荐

    从函数获取返回的变量到ADD_SHORTCODE函数

    接下来,我成功地将一个ajax对象传递到后端(JS中的脚本实际上并不重要,因为我已经很好地完成了):add_action( \'wp_ajax_my_action\', \'my_action_callback\' ); add_action( \'wp_ajax_nopriv_my_action\', \'my_action_callback\' ); add_action( \'wp_enqueue_scripts\', \'theme_name_scripts\' ); ad