如何使用用户的表单输入来注册简短代码?

时间:2019-01-22 06:44:14

标签: wordpress

我正在尝试构建一个插件,在这里我需要从表单中获取用户的输入,并使用一些用户输入来创建一个简码。我为添加表单创建了单独的页面。我正在尝试处理输入数据并保存在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";
}
}

我只需要在每次提交表单时注册简码。这样用户就可以粘贴简码,并在需要的地方返回内容。

1 个答案:

答案 0 :(得分:0)

因此,提交表单后,便会“添加”您的简码。当您导航到其他页面或重新加载屏幕时,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 );
    }
}

未经测试。但应该可以。