当回应我自己的短代码时,它总是在我的博客帖子的末尾添加一个1

时间:2020-11-23 作者:Mähnenwolf

我目前正在构建自己的插件并进行测试,以确保一切正常
我使用register\\u settings()在后端创建了一个表单,我在表单中填充了信息,检索信息没有问题。在我的帖子编辑中,我写下[项目列表],我的短代码,这是我在前端得到的。enter image description here

最后,您可以看到1。有点像分页,但不是。当我检查这个时,它只是一个文本框架。然后我在编辑器中输入了几个短代码([项目列表][项目列表][项目列表][项目列表][项目列表]),然后我得到了以下结果:enter image description here

又是几个1!这次他们都在同一个p标签上。我不知道这些1是从哪里来的。

这是我的布局PHP文件:

<?php

$title = get_option( "set_title" );
$icon = get_option( "choose_icon" );
$desc = get_option( "set_description" );

?>

<ul>
<li><?php echo $icon; ?></li>
</ul>

<div>
  <div>
    <span>
    <?php echo $icon; ?>
    </span>
    <span>
    <?php echo $title; ?>
    </span>
  </div>
  <div>
    <p>
    <?php echo $desc; ?>
    </p>
  </div>
</div>
即使我创建了一个新的帖子或页面并添加了短代码,结果也是一样的。当我删除短代码并编写一些文本时,no 1。有人知道为什么会这样吗?

短代码:

<?php
/**
 * @package XXXXX
 */

 namespace Inc\\API;

 use Inc\\Base\\BaseController;

/*
Basecontroller declares the plugin_path variable.
$this->plugin_path = plugin_dir_path( dirname( __FILE__, 2 ) );
it directions to the root dir.
*/

 class ShortcodeList extends BaseController {

   public function listLayout() {
    return require( $this->plugin_path . "/admin/itemList.php" );
  }

  public function register() {
    add_shortcode( "ItemList", array( $this, "listLayout") );
  }
 }

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

这是您的问题:

   public function listLayout() {
    return require( $this->plugin_path . "/admin/itemList.php" );
  }
短代码需要以字符串形式返回其输出,但事实并非如此。快捷码直接输出,而不是在正确的时间由WordPress输出。如果使用嵌套的短代码,这将变得非常明显,因为显示顺序不正确。

这一错误进一步加剧,因为require 不返回输出,而是返回成功/失败。因为它找到并加载了admin/itemList.php 它回来了1, 这就是尾随1 来自。

要解决此问题,请使用输出缓冲区来捕获输出。

相关推荐

Image Shortcode from ACF ID

我想创建一个快捷码,用于显示ACF自定义字段中的图像,该字段当前的返回格式设置为Image ID. 短代码需要接受post\\u id,以便从特定页面获取字段。因此,短代码是:[acf_featured_item post_id=\"88\"] 我知道有一个可用的ACF快捷码,但已经有另一个位置依赖于ID的返回格式。因此我无法更改此位置。我当前的代码是:function acf_featured_item_shortcode( $atts ) { // Attributes $a