Wordpress Shortcode不会呈现我的表单,而是将其名称显示为文本

Wordpress Shortcode不会呈现我的表单,而是将其名称显示为文本,wordpress,shortcode,Wordpress,Shortcode,我最近开始学习WordPress。我正在尝试创建一个自定义表单,以便用户使用我在没有插件的情况下创建的自定义帖子类型发布数据。为此,我创建了一个自定义插件,并从管理员处激活它。但是当页面加载时,我看不到表单,而是将shortcode的名称显示为文本。我已经检查了另一个StackOverflow帖子,但无法正确理解它与我的问题的关系 我的插件如下所示: <?php /* Plugin Name: Custom frontend entry form Description: Custom f

我最近开始学习WordPress。我正在尝试创建一个自定义表单,以便用户使用我在没有插件的情况下创建的自定义帖子类型发布数据。为此,我创建了一个自定义插件,并从管理员处激活它。但是当页面加载时,我看不到表单,而是将
shortcode
的名称显示为文本。我已经检查了另一个StackOverflow帖子,但无法正确理解它与我的问题的关系

我的插件如下所示:

<?php
/*
Plugin Name: Custom frontend entry form
Description: Custom frontend entry form for publishing trip reports by users
Version: 1.0
Author: Subrata Sarkar
*/

/* Register Custom Post Type */
function trip_report_init() {
    //Set up labels
    $labels = array(
        'name' => 'Trip Report',
        'singular_name' => 'Trip Report',
        'add_new' => 'Create New Report',
        'add_new_item' => 'Create New Report',
        'edit_item' => 'Edit Trip Report',
        'new_item' => 'New Trip Report',
        'all_items' => 'All Trip Reports',
        'view_item' => 'View Trip Report',
        'search_items' => 'Search Trip Reports',
        'not_found' => 'No Trip Report Found',
        'not_found_in_trash' => 'No Trip Report found in Trash',
        'parent_item_colon' => '',
        'menu_name' => 'Trip Reports'
    );

    //register_post_type
    $args = array(
        'labels' => $labels,
        'public' => true,
        'has_archive' => true,
        'show_ui' => true,
        'capability_type' => 'post',
        'hierarchical' => false,
        'rewrite' => array('slug' => 'trip-reports'),
        'query_var' => true,
        'menu_icon' => 'dashicon-normalize',
        'supports' => array(
            'title',
            'editor',
            'excerpt',
            'comments',
            'author',
            'thumbnail',
            'page-attributes'
        )
    );

    register_post_type('trip_report', $args);

    //register taxonomy
    register_taxonomy('report_category', 'trip_report', array(
        'hierarchical' => true,
        'label' => 'Report Category',
        'query_var' => true,
        'rewrite' => array('slug' => 'report-category')
    ));

    //echo 'Trip report entry form';
}
add_action('init', 'trip_report_init');
/* Ends registration */

/* Build the form */
function trip_report_entry_form() { ?>
    <form id="trip-report-entryform" name="trip-report-entryform" method="post" action="">
        <div class="row">
            <div class="col-md-12">
                Report title <i class="red-text">*</i>
                <input type="text" id="txtTitle" name="txtTitle" class="form-control" maxmaxlenght="30" required />
            </div>
            <div class="clearfix"></div>
        </div>
        <div class="row">
            <div class="col-md-12">
                <input type="submit" value="Submit" class="btn btn-primary text-small" />
            </div>
            <div class="clearfix"></div>
        </div>
    </form>
<?php }
/* Ends form */

add_shortcode('new_trip_report', 'trip_report_entry_form');

//if ( shortcode_exists( 'new_trip_report' ) ) { echo "The shortcode exists";}

?>

报告标题*
但是,当我在页面内容编辑器中添加短代码时,页面不会呈现表单,而只是将短代码的名称显示为文本

屏幕截图:

我提到


据我所知,我在参考代码和我的代码之间找不到任何区别。我的方法有什么问题?

问题是您的函数
行程报告\u条目\u表单
没有返回任何内容

用以下代码替换该功能:

function trip_report_entry_form($atts) {
    $out = '';
    $out .='<form id="trip-report-entryform" name="trip-report-entryform" method="post" action="">
                <div class="row">
                    <div class="col-md-12">
                        Report title <i class="red-text">*</i>
                        <input type="text" id="txtTitle" name="txtTitle" class="form-control" maxmaxlenght="30" required />
                    </div>
                    <div class="clearfix"></div>
                </div>
                <div class="row">
                    <div class="col-md-12">
                        <input type="submit" value="Submit" class="btn btn-primary text-small" />
                    </div>
                    <div class="clearfix"></div>
                </div>
            </form>';
    return $out;
 }
功能跳闸报告录入表($atts){
$out='';
$out.='
报告标题*
';
退回$out;
}

在帖子编辑器中,确保没有转义字符。在内容编辑器的右上角,从可视化切换到HTML。您的短码括号显示为
[
]如果它们被转义。

代码中有两个问题

  • 短代码应该返回一个值;他们不应该直接输出
  • 当您尝试使用
    新行程报告时,您的快捷码被注册为
    新行程报告
  • 在快捷码回调中返回HTML并更新注册

    function trip_report_entry_form() {
       return '<form id="trip-report-entryform" name="trip-report-entryform" method="post" action="">
            <div class="row">
                <div class="col-md-12">
                    Report title <i class="red-text">*</i>
                    <input type="text" id="txtTitle" name="txtTitle" class="form-control" maxmaxlenght="30" required />
                </div>
                <div class="clearfix"></div>
            </div>
            <div class="row">
                <div class="col-md-12">
                    <input type="submit" value="Submit" class="btn btn-primary text-small" />
                </div>
                <div class="clearfix"></div>
            </div>
        </form>';
    }
    add_shortcode( 'new-trip-report', 'trip_report_entry_form' );
    
    function trip\u report\u entry\u form(){
    返回'
    报告标题*
    ';
    }
    添加快捷代码(“新行程报告”、“行程报告”和“条目表”);
    

    进一步阅读:

    感谢您的快速回复。我按照你的建议更改了代码。但它仍然显示相同的内容。我在admin中创建了一个新页面,并将短代码放在编辑器中。为了检查该功能是否正常工作,我删除了所有
    表单
    代码,只需放入
    。但它仍然输出
    [新行程报告]
    ,即短代码的名称作为页面上的文本。很抱歉,它可能是
    $atts
    参数。将其添加为函数的参数。请参阅更新的代码。如果没有帮助,请启用调试模式以查看错误消息