Questions tagged «plugin-development»

WordPress插件可轻松修改,自定义和增强WordPress博客。您可以使用WordPress插件添加功能,而无需更改WordPress的核心编程。

2
在自定义表中是否必须使用$ wpdb-> prefix
抱歉,这个问题不重要。我刚刚开始在WordPress中开发插件。 在所有教程中,我都发现了这一点:在创建自定义表时$wpdb->prefix会使用它。 例: $table_name = $wpdb->prefix . "liveshoutbox"; 我的问题: 是否必须使用$wpdb->prefix?如果我的自定义表不使用前缀会怎样?

4
保存/更新后如何添加管理员通知
我有一个帖子类型,使用post_save从帖子元中获取地址并从Google API中检索经/纬度坐标。我需要一种通知用户检索协调项是否存在问题的方法。我尝试使用admin_notices,但未显示任何内容: public static function update_notice() { echo "<div class='error'><p>Failed to retrieve coordinates. Please check key and address.<p></div>"; remove_action('admin_notices', 'update_notice'); } add_action('admin_notices', array('GeoPost', 'update_notice')); 我不确定是否使用不正确或使用错误的上下文。需要明确的是,在实际代码中,add_action位于同一类的另一个函数中。很好

1
WordPress为什么要向Ajax响应添加0(零)?
除非我用exit()或结束Ajax处理功能,否则die()Ajax函数将接收所需且正确的输出,但后跟0。 知道为什么会这样吗? 是那样的意思还是可以解决? add_action('wp_ajax_get_homepage', 'get_homepage'); add_action('wp_ajax_nopriv_get_homepage', 'get_homepage'); function get_homepage(){ echo "get_homepage ->"; exit(); } 我已经在AJAX中阅读了Plugins,但是为什么这样做是必要的?

6
如何正确包含jQuery和JavaScript文件?
我现在用以下代码来做: function uw_load_scripts() { // De-register the built in jQuery wp_deregister_script('jquery'); // Register the CDN version wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js', array(), null, false); // Load it in your theme wp_enqueue_script( 'jquery' ); } add_action( 'wp_enqueue_scripts', 'uw_load_scripts' ); 这可行,但是我应该对所有人(像这样)或除admin之外的每个人执行此操作(以便后端使用WordPress版本?): if (function_exists('load_my_scripts')) { function load_my_scripts() { if (!is_admin()) { wp_deregister_script( 'jquery' ); wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js', …

1
插件表格提交最佳实践
我已经做了很多研究,但是没有找到我想要的东西,因此我希望可以指出正确的方向。 我正在开发一个Events插件,它将从前端预订票证。这与其他任何Form提交都没有什么不同,但是让我感到困惑的是如何处理通过OOP用类编写的插件的处理方式。 我发现的大多数文章都说要在模板页面中进行$ _POST处理。理想情况下,我希望通过插件中的函数来处理此问题。 我不确定的另一件事是,当您在前端提交表单时,该表单实际上是如何传递到后端的函数的。我希望从任何模板详细信息中完全抽象出表单处理。 // events.php if ( ! class_exists( 'Events' ) ) { Class Events { function __construct() { add_action( 'plugins_loaded', array( &$this, 'includes' ), 1 ); } function includes() { require_once( EVENTS_INCLUDES . 'functions.php' ); } } } if ( class_exists( 'Events' ) ) { $events_load = …

3
我需要寻找哪些常见的安全缺陷?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 作为想成为WP插件的开发人员,我应该寻找哪些主要的安全漏洞/漏洞? 我将使用配置面板(即输入字段和内容)创建一个新插件。我应该担心什么? 例如,由于数据清理在/ wp-admin /区域中是否重要?恶意者可以直接点击我的插件页面并发送POST请求或类似的内容吗? 谢谢!

3
应该使用哪个钩子来添加包含重定向的操作?
我想构建一个从查询字符串中获取某些url参数的插件,以为同一页面构建一个新的查询字符串。我遵循的是《专业WordPress插件开发》这本出色的书,但是我不确定该操作使用哪个钩子。这是我的动作函数: add_action( 'init', 'tccl_redirect' ); function tccl_redirect() { header ( "Location: http://www.mysite.com/$mypage?$newparam=$newvalue" ); ?> 哪些挂钩适合头重定向?


3
为什么wp_options表在autoload上没有索引?
在WordPress服务的每个页面的开头,都有一个MySQL调用来获取选项: SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes'; 因为autoload列上没有索引,所以MySQL必须查找所有行。 我还遇到了对此答案的评论,说即使有索引也不会提高性能。 在我的应用程序中,我使用了很多瞬态值来替代会话。他们的工作很棒,我有自己的垃圾回收程序。我注意到在wp_options表格中,我的瞬态值(以开头的值_transient_)都具有autoload=no。我期望wp_options表的行数会随着并发用户数的增加而增加。 我想知道为什么表格是这样设计的。我应该为我的特殊情况创建索引吗?

1
存储在多维数组中的更新选项
我wp_options表中的数据当前存储为多维数组(profile_element_order): a:12:{s:17:"img_base64_enable";s:1:"1";s:25:"moulding_combination_page";s:0:"";s:24:"moulding_collection_page";s:0:"";s:25:"idea_gallery_thumb_height";s:3:"200";s:24:"idea_gallery_thumb_width";s:3:"200";s:23:"collection_thumb_height";s:3:"200";s:22:"collection_thumb_width";s:3:"200";s:20:"profile_item_columns";s:1:"4";s:17:"idea_item_columns";s:1:"2";s:24:"collections_item_columns";s:1:"2";s:25:"combinations_item_columns";s:1:"4";s:21:"profile_element_order";a:5:{i:0;s:8:"Option 1";i:1;s:8:"Option 2";i:2;s:8:"Option 3";i:3;s:8:"Option 4";i:4;s:8:"Option 5";}} 我想要完成的是更新profile_element_order选项(在这些选项中)。到目前为止,这是所有内容的样子: function psort_save_order() { global $mouldings_options; $list = $mouldings_options['profile_element_order']; $new_order = $_POST['list_items']; $new_list = array(); // update order foreach($new_order as $v) { if(isset($list[$v])) { $new_list[$v] = $list[$v]; } } // save the new order update_option('profile_element_order', $new_list); die(); } add_action('wp_ajax_psort_update_order', 'psort_save_order'); 数据正确地发布到了DB表中(正如我可以看到的一些失败尝试那样,它们是新的选项条目,例如mouldings_settings->profile_element_order),我很难确定update_option()该特定选项的语法。我已经尝试过类似的事情(记住`mouldings_settings是实际的选项名称): mouldings_settings['profile_element_order'] $mouldings_options['profile_element_order'] …

10
WordPress插件开发-已发送邮件头
我正在开发WordPress插件。激活插件时,我收到以下消息: 该插件在激活期间生成了293个字符的意外输出。如果您发现“标题已发送”消息,联合供稿问题或其他问题,请尝试停用或删除此插件。 该插件运行良好,但我不知道为什么收到此消息。我的插件是:http : //wordpress.org/extend/plugins/facebook-send-like-button/

2
我应该用什么代替WP_CONTENT_DIR和WP_PLUGIN_DIR?
用于确定插件和内容目录的WordPress文档指出: WordPress在确定内容目录和插件目录的路径时会使用以下常量。这些不应直接由插件或主题使用,而是出于完整性的目的在此处列出。 它接着名单WP_CONTENT_DIR和WP_PLUGIN_DIR常量,因为这个主题和插件开发者不宜用,想必其中: WordPress允许用户将wp-content目录放置在他们想要的任何位置,因此您绝不能假定插件将位于wp-content / plugins中,或者上传将位于wp-content / uploads中,或者主题将位于wp-内容/主题。 马克·贾奎斯(Mark Jaquith)在这里还评论说,不应使用这些常量: 不要使用WP_PLUGIN_URL或WP_PLUGIN_DIR-插件可能不在插件目录中。 那么,在不使用这些常量的情况下引用插件,wp-content和theme文件夹的完整路径的公认方法是什么? 作为一个简单的示例,要输出所有已安装插件的完整路径,我可以这样做: <?php $plugins = get_plugins(); foreach ($plugins as $file => $details) { echo WP_PLUGIN_DIR . '/' . $file . '<br>'; } 产生如下列表: /var/www/wp-content/plugins/akismet/akismet.php /var/www/wp-content/plugins/debug-bar/debug-bar.php /var/www/wp-content/plugins/hello.php (例如,如果我正在编写插件以允许用户有选择地将插件存档作为站点备份的一部分,则可能要这样做。) 如果使用WP_PLUGIN_DIR错误,建议的替代方法是什么?我找不到与之相对应wp_upload_dir()的插件,主题和wp-content文件夹,这使引用可能徘徊的主题和插件根目录成为问题。

4
wordpress wp-includes文件夹有什么用?
wordpress wp-includes文件夹有什么用?也就是说,它的基本体系结构用途是什么,例如,为什么不是全部都在主题或管理​​文件夹中? 插件开发人员可以依靠它的内容(例如jQuery)以及多长时间? 我还想知道,谁来决定其中的内容,以及如何在Wordpress更改时对其进行维护,所有这些都作为策略文档记录在某处?


5
dbDelta不创建表
我经历了很多线程和Codex页面,并尝试弄乱了很多东西,但是我的代码似乎并没有创建表。而且我无法弄清楚我要去哪里。我检查了数据库中的booking_db_version,当我在文件中更新它时它会更新。 这是代码 global $booking_db_version; $booking_db_version = "1.0.0"; function booking_install() { global $wpdb; global $booking_db_version; global $tableprefix; $installed_version = get_option('booking_db_option'); $tableprefix = $wpdb->prefix . 'booking_'; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); if ( $installed_version !== $booking_db_version ) { /* Create table for packages */ $packagetable = $tableprefix . 'packages'; $sql = "create table $packagetable …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.