我正在尝试构建一个插件,在这里我需要从表单中获取用户的输入,并使用一些用户输入来创建一个简码。我为添加表单创建了单独的页面。我正在尝试处理输入数据并保存在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";
}
}
我只需要在每次提交表单时注册简码。这样用户就可以粘贴简码,并在需要的地方返回内容。
答案 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 );
}
}
未经测试。但应该可以。