首页 > 解决方案 > 如何使用用户的表单输入注册短代码?

问题描述

我正在尝试构建一个插件,我需要从表单中获取用户的输入并使用一些用户输入创建一个简码。我为添加表单创建了一个单独的页面。我正在尝试处理输入数据并保存在 WordPress DB 中的自定义表中。我面临的问题是,将数据保存在我的自定义表中后,我想用一些输入创建一个短代码,但是带有回调函数的 add_shortcode 方法不起作用。我是 Wordpress 的新手,所以我不确定我哪里出错了。

我已经尝试了很多方法,但最后还是摸不着头脑。我试过先保存一切。然后在插件主文件上。试图从数据库中检索数据并在那里创建简码。但没有结果

if (isset($_POST['sc_add_submit'])) {

$name = sanitize_text_field($_POST['sc_name']);
$shortcode = sanitize_text_field($_POST['shortcode']);
$content = sanitize_text_field($_POST['content']);
$short_desc = sanitize_text_field($_POST['short_desc']);

$errors = [];
$msgs = [];



global $wpdb;
$wpdb->insert('wp_sc_content', array(
    'sc_name' => $name,
    'shortcode' => 'sc_'.$shortcode,
    'content' => $content,
    'short_desc' => $short_desc,
));
$sc_lastInsert_id = $wpdb->insert_id;

if (!empty($sc_lastInsert_id)) {
    $msgs[] = "Shortcode inserted succesfully";
    function sc_register_shortcode()
    {

        return $content;
    }
    add_shortcode($shortcode, 'sc_register_shortcode');


} else {
    $errors[] = "DB insert failed";
}
}

每次提交表单时我只需要注册简码。以便用户粘贴短代码并将内容返回到他想要的任何地方。

标签: wordpress

解决方案


因此,一旦提交表单,您的简码就会被“添加”。当您导航到其他页面或重新加载屏幕时,add_shortcode()不再触发!

您需要做的是从数据库中查询您的短代码并将其挂钩到类似init的东西,所以它总是被加载。

让我为你写代码-

<?php
add_action( 'init', 'wpse_54302608_add_shortocodes' );
function wpse_54302608_add_shortocodes() {
    global $wpdb;
    $table = 'wp_sc_content'; // hopefully $wpdb->prefix . 'sc_content';
    $query = "SELECT * FROM {$table}";
    $results = $wpdb->get_results( $query );

    foreach ( $results as $row ) {
        $fn = function() use ( $row ) {
            return $row->content;
        };
        add_shortcode( $row->shortcode, $fn );
    }
}

未测试。但应该工作。


推荐阅读