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";
}
}
每次提交表单时我只需要注册简码。以便用户粘贴短代码并将内容返回到他想要的任何地方。
解决方案
因此,一旦提交表单,您的简码就会被“添加”。当您导航到其他页面或重新加载屏幕时,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 );
}
}
未测试。但应该工作。
推荐阅读
- c# - 使用 Process.Start 打开资源管理器窗口会创建过多的 explorer.exe 进程
- python - 根据打印输出发送电子邮件 - Python
- vue.js - 我提到了 vue.js 公式,但我得到一个错误
- java - 迭代自定义对象列表,过滤条件并设置特定属性
- sap-cloud-sdk - 如何使用 Cloud SDK v3 在 Bapi 调用中提供结构参数作为导入
- python - 在 Python 中从数据框中打开下载的文件时出错
- python - 添加进度条以使用熊猫读取数据框?
- windbg - 从用户空间按需获取内核转储,无需内核调试 (Windows)
- mysql - 如何将此 Firebase 数据库转换为 SQL 数据库?
- typescript - 如何在nestjs应用程序模块中注入接口