插件升级过程中丢失插件定制

时间:2014-06-09 作者:eyoung100

我在WordPress插件/黑客论坛上问过这个问题,因为SE昨天处于只读模式。我确实得到了一个答案,但“相对noobie”正在起作用,因为我需要一个例子来看看如何使用答案提供的方法。

Original Post and Answer

在下面重新发布,以便示例适合。。。

我对WordPress比较陌生,但我是个程序员。因此,我不喜欢重新发明轮子。最近,我下载了一个插件。如果需要的话,我可以修改这篇文章来说明插件是什么,但这是更一般化的。此插件跟踪项目,并基于这些跟踪的项目创建新闻稿。

其中一项是性别。由于我遇到的访客有时是情侣,他们共享电子邮件地址(电子邮件是必填字段),因此我不能要求他们每人都有一封电子邮件,所以在性别字段中,我添加了情侣,并对其进行了测试,效果很好。现在,它在WordPress数据库中的插件自定义表中添加了一个m代表男性,f代表女性,c代表情侣。

最近,插件有了更新,我更新了它。因为我修改了插件核心文件中的部分,更新重写了我添加的自定义字段,导致我不得不重新添加我所做的自定义工作。有人能告诉我定制插件的最佳方法是什么,同时保持插件的最新状态吗?我是否可以使用/添加一个钩子来完成我的要求等。?

我确实发现了这个:

How to edit a wordpress plugin without break its update process, Tom的答案是,我需要知道我是否可以实施,以及如何。。。

UPDATE
插件名称:Newsletter

编辑示例:

wp内容/插件/新闻稿/用户/编辑。php

<tr valign="top">
<th>Gender</th>
   <td>
      <?php $controls->select(\'sex\', array(\'n\' => \'Not specified\', \'f\' => \'Female\', \'m\' => \'Male\', \'c\' => \'Couple\')); ?>                             
       <div class="hints">                
            This can also be a couple, if our members are sharing e-mail addresses.
       </div>
       </td>
       </tr>

1 个回复
最合适的回答,由SO网友:Adam 整理而成

在看了插件之后,我可以看到两个选项,虽然可能还有其他方法来解决这个问题,但我的时间有限,因此我将为您提供一些关于您现在可以做什么的见解。

首先,插件作者为您提供了一些额外的过滤器:

时事通讯\\u profile\\u extra(请参阅时事通讯/订阅/订阅.php)

您可以使用这些过滤器向相应的订阅和配置文件页面添加其他控件。

但是,请注意,乍一看,似乎没有任何过滤器来扩充现有字段,如性别/性别字段。

但是你可以使用这些过滤器添加一个额外的字段,比如一个复选框,询问用户他们是否是夫妻,如果他们标记了这个复选框,你可以使用第三个过滤器newsletter_profile_save 在将值插入数据库之前对其进行筛选。

此时,您将确定如果标记了复选框,那么您将用“couple”或“c”或任何您希望存储以供以后检索的数据库值替换sex post值:

//pseudo-code example
if ( isset($_POST[\'are_you_a_couple\']) && $_POST[\'are_you_a_couple\'] === 1 ) {
   $_POST[\'sex\'] = \'couple\';
}
上面描述的过程只是一个高层次的概述,比我下一个建议的解决方案要复杂得多,该解决方案是将您自己的自定义JavaScript文件排队到表单控件显示的相应页面上,并向性别/性别下拉字段添加附加选项。

例如,将以下代码添加到主题函数中。php文件:

/**
 * Proper way to enqueue scripts and styles
 */
function custom_newsletter_scripts() {
    wp_enqueue_script( \'script-name\', get_template_directory_uri() . \'/js/custom-control.js\', array(), \'1.0.0\', true );
}

add_action( \'wp_enqueue_scripts\', \'custom_newsletter_scripts\' );
然后创建自定义控件。js文件放在您的主题下/js/ 目录或您希望存储脚本的任何位置,只需确保您的路径在调用wp_enqueue_script 在上面

在JavaScript文件中,可以执行以下操作:

;(function($){

  $(document).ready(function(){

     $(\'#gender_select_menu\')
         .append($("<option></option>")
         .attr("value",\'c\')
         .text(\'Couple\')); 

  });

})(jQuery);
代码示例很粗糙,请根据您的喜好执行JavaScript,如果DOMReady上不存在控件,您可能希望添加超时或修改上的DOM$(window).load(function(){});

这应该足以让您朝着正确的方向前进,并保证您的更改不会因插件更新而进一步丢失。

结束

相关推荐

Custom Post Types in plugins?

我一直在想这个。在我现在看到的大多数插件中,它们看起来像CPT,但没有“已发布”链接。他们也不担任职务。它们只是停留在仪表板中的插件,页面和列列表顶部有“添加新”链接,当您单击“编辑”时,可以像在任何其他CPT中一样编辑项目。所以我想知道他们是否是CPT?如果是的话,有没有关于这方面的教程?我正在考虑为我的网站创建一个插件,我想要的是构建一个插件,我可以“添加新项目”,并保存项目(并且可以编辑)。我可以通过短代码调用项目。我知道如何在函数中创建CPT。php和我一直在阅读关于基本插件创建的内容。我似乎找不