更改或删除插件中的功能

时间:2018-06-27 14:08:26

标签: php wordpress

完美的woocommerce品牌仅允许使用某些标签,并通过该功能删除其余标签

if( isset( $_POST['pwb_brand_description_field'] ) ){
   $desc = strip_tags(
     wp_unslash( $_POST['pwb_brand_description_field'] ),
     '<p><span><a><ul><ol><li><h1><h2><h3><h4><h5><h6><pre><strong><em><blockquote><del><ins><img><code><hr>'
  );
  global $wpdb;
  $wpdb->update( $wpdb->term_taxonomy, [ 'description' => $desc ],     [ 'term_id' => $term_id ]  );

我正在寻找一种替代方法,以便可以包含所有标签,尤其是<div>

我希望可以将某些内容添加到functions.php中,这将有助于我实现这一目标?

1 个答案:

答案 0 :(得分:1)

因为插件作者没有为此特定功能添加任何过滤器/挂钩,所以您必须做一个相当笨拙的解决方法。

非常感谢,通过几个操作调用了此函数

add_action( 'edit_pwb-brand', array( $this, 'add_brands_metafields_save' ) );
add_action( 'create_pwb-brand', array( $this, 'add_brands_metafields_save' ) );

这意味着我们也许可以添加在这两个之后之后运行的自己的动作,而也许可以做您要做的事情想要。

请注意,这不是最佳选择,但无法避免。此功能实际上运行了两次(插件中的原始版本,再加上您的版本),这对性能没有好处-但是,因为只有在管理员保存品牌后才会发生这种情况,所以性能应该不会太差。

首先,添加您自己的具有较高优先级的操作,然后复制具有所需修改的原始功能。

通常建议您在主题的functions.php文件中执行此操作,但这并不理想-如果要更改主题或更新主题但保留此功能怎么办?相反,我强烈建议,您可以构建自己的小型轻量级插件。此类插件的完整代码如下。 (只需将此代码添加到PHP文件中,然后将其放在您的plugins目录中即可。)

<?php
/**
 *  Plugin Name: Override Perfect WooCommerce Brands Meta
 *  Description: Custom override to permit div tags in brand meta description
 *  Version: 1.0.0
 *  Author: SupGen
 */

// Note the higher priority levels - to ensure these run AFTER the main plugin is done
add_action( 'edit_pwb-brand', 'override_add_brands_metafields_save', 9999 );
add_action( 'create_pwb-brand', 'override_add_brands_metafields_save', 9999 );

function override_add_brands_metafields_save( $term_id ) {
    // NOTE: hard-coding the file name here in order to verify the nonce.  MAY need to be changed
    $filename = 'class-brands-custom-fields.php';
    if ( ! isset( $_POST[ 'pwb_nonce' ] ) || ! wp_verify_nonce( $_POST[ 'pwb_nonce' ], $filename ) ) {
        return;
    }

    // removed bits you didn't care about, keeping only the relevant part

    if ( isset( $_POST[ 'pwb_brand_description_field' ] ) ) {
        // added div tag to allowed tags list
        $desc = strip_tags(
            wp_unslash( $_POST[ 'pwb_brand_description_field' ] ),
            '<div><p><span><a><ul><ol><li><h1><h2><h3><h4><h5><h6><pre><strong><em><blockquote><del><ins><img><code><hr>' 
        );

        global $wpdb;
        $wpdb->update( $wpdb->term_taxonomy, [ 'description' => $desc ], [ 'term_id' => $term_id ] );
    }
}