当我选中我的 Wordpress 插件中的复选框时,如何应用过滤器?

How can I apply a filter when I check the checkbox in my Wordpress plugin?

我正在构建一个 wordpress 插件,当我选中插件设置页面中的复选框时,我想应用和使用具有以下代码的文件。

功能 我要申请:

function greeklish_title_sanitizer($text) {

if ( !is_admin() ) return $text;
$expressions = array(

    '/[αάΑΆ]/u'   => 'a',
    '/[βΒ]/u'     => 'v',
    '/[γΓ]/u'     => 'g',
    '/[δΔ]/u'     => 'd',
    '/[εέΕΈ]/u'   => 'e',
    '/[ζΖ]/u'     => 'z',
    '/[ηήΗΉ]/u'   => 'i',
    '/[θΘ]/u'     => 'th',
    '/[ιίϊΙΊΪ]/u' => 'i',
    '/[κΚ]/u'     => 'k',
    '/[λΛ]/u'     => 'l',
    '/[μΜ]/u'     => 'm',
    '/[νΝ]/u'     => 'n',
    '/[ξΞ]/u'     => 'x',
    '/[οόΟΌ]/u'   => 'o',
    '/[πΠ]/u'     => 'p',
    '/[ρΡ]/u'     => 'r',
    '/[σςΣ]/u'    => 's',
    '/[τΤ]/u'     => 't',
    '/[υύϋΥΎΫ]/u' => 'y',
    '/[φΦ]/iu'    => 'f',
    '/[χΧ]/u'     => 'ch',
    '/[ψΨ]/u'     => 'ps',
    '/[ωώ]/iu'    => 'o',
    
    '/[αΑ][ιίΙΊ]/u'                             => 'e',
    '/[οΟΕε][ιίΙΊ]/u'                           => 'i',
    '/[αΑ][υύΥΎ]([θΘκΚξΞπΠσςΣτTφΡχΧψΨ]|\s|$)/u' => 'af',
    '/[αΑ][υύΥΎ]/u'                             => 'av',
    '/[εΕ][υύΥΎ]([θΘκΚξΞπΠσςΣτTφΡχΧψΨ]|\s|$)/u' => 'ef',
    '/[εΕ][υύΥΎ]/u'                             => 'ev',
    '/[οΟ][υύΥΎ]/u'                             => 'ou',
    '/(^|\s)[μΜ][πΠ]/u'                         => 'b',
    '/[μΜ][πΠ](\s|$)/u'                         => 'b',
    '/[μΜ][πΠ]/u'                               => 'b',
    '/[νΝ][τΤ]/u'                               => 'nt',
    '/[τΤ][σΣ]/u'                               => 'ts',
    '/[τΤ][ζΖ]/u'                               => 'tz',
    '/[γΓ][γΓ]/u'                               => 'ng',
    '/[γΓ][κΚ]/u'                               => 'gk',
    '/[ηΗ][υΥ]([θΘκΚξΞπΠσςΣτTφΡχΧψΨ]|\s|$)/u'   => 'if',
    '/[ηΗ][υΥ]/u'                               => 'iu',

);



$text = preg_replace( array_keys($expressions), array_values($expressions), $text );
return $text;

}

add_filter('sanitize_title', 'greeklish_title_sanitizer', 1);

我的插件 main 文件:

<?php
/*
Plugin Name: random permalink converter
Description: This is my custom Plugin!
Author: Jordan Piperkata
Version: 1.0.0
Tested up to: 5.9
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
*/
defined( 'ABSPATH' ) or die;

function gpc_add_settings_page() {
    add_options_page( 'GRPC', 'randomPermalinksConverter', 'manage_options', 'random-permalink-converter', 'gpc_render_plugin_settings_page' );

    register_setting(
        'gpc_settings', // settings group name
        'homepage_text', // option name
        'sanitize_text_field' // sanitization function
    );

    add_settings_section(
        'some_settings_section_id', // section ID
        '', // title (if needed)
        '', // callback function (if needed)
        'random-permalink-converter' // page slug
    );

    add_settings_field(
        'homepage_text',
        'Homepage text',
        'text_field_html', // function which prints the field
        'random-permalink-converter', // page slug
        'some_settings_section_id', // section ID
        array( 
            'label_for' => 'homepage_text',
            'class' => 'gpc-class', // for <tr> element
        )
    );
}

add_action( 'admin_menu', 'gpc_add_settings_page' );

function gpc_render_plugin_settings_page() {

    echo '<div class="wrap">
    <h1>random Permalink Converter Settings Page</h1>
    <form method="post" action="options.php">';
            
        settings_fields( 'gpc_settings' ); // settings group name
        do_settings_sections( 'random-permalink-converter' ); // just a page slug
        submit_button();

    echo '</form></div>';

}

function text_field_html(){

    $text = get_option( 'homepage_text' );

    if ( $text == 'on' ) {
        printf(
            '<input type="checkbox" id="homepage_text" name="homepage_text" checked="checked" />',
            esc_attr( $text )
        );
        echo 'Toggle is: '.$text;
    } else {
        printf(
            '<input type="checkbox" id="homepage_text" name="homepage_text" />',
            esc_attr( $text )
        );
        echo 'Toggle is: Off';
    }
        
}

function permalink_set(){

    add_filter('sanitize_title', 'random_title_sanitizer', 1);

}

回顾:

1): 我在主文件中使用这段基本代码来创建自定义插件设置页面。 2): 我有一个名为 text_field_html 的函数,它创建了一个复选框,我希望当复选框被选中时应用 function's file 的过滤器。但是在 if 之后包含检查复选框是否被选中的文件不起作用,因为这个插件应该回显一个字符串。如果我只是直接在 main 文件中使用 function's code,它工作正常,但当然没有先选中复选框。

问题:

我在这里做错了什么?或者,当我选中设置页面中的复选框并保存时,如何调用 wordpress 的这种类型的 add_filter 函数并使它们保持活动状态?

提前感谢您的宝贵时间!

希望我明白你的意思。你应该检查选项 homepage_text 并添加过滤器。

add_action('init', 'permalink_set');
function permalink_set(){
    if  (get_option( 'homepage_text' ) == 'on'){
        add_filter('sanitize_title', 'random_title_sanitizer', 1);
    }
}