How to add a filter conditionally based on page re

2019-07-21 15:45发布

I am developing a WordPress plugin and can't conditionally add filters based on the conditional tags.

This is my code:

add_Action('init', 'determine_location');

function determine_location() {
$d = get_option('display_locations'); //this is a checkbox field in the plugins settings with 7 options
    if (isset($d)) {
        if ($d[0] == 'home') {
            if (is_home()) {
                add_filter('the_excerpt', 'insert_buttons_to_post_top');
                add_filter('the_content', 'insert_buttons_to_post_top');
            }
        } else if ($d == 'post' || $d == 'post') {
            if (is_single()) {
                add_filter('the_content', 'insert_buttons_to_post_top');
            }
        } else if ($d[0] == 'page' || $d == 'page' || $d == 'page') {
            if (is_page()) {
                add_filter('the_content', 'insert_buttons_to_post_top');
            }
        } else if ($d[0] == 'category' || $d[1] == 'category' || $d[2] == 'category' || $d[3] == 'category') {
            if (is_category()) {
                add_filter('the_excerpt', 'insert_buttons_to_post_top');
                add_filter('the_content', 'insert_buttons_to_post_top');
            }
        } else if ($d[0] == 'tag' || $d[1] == 'tag' || $d[2] == 'tag' || $d[3] == 'tag' || $d[4] == 'tag') {
            if (is_tag()) {
                add_filter('the_excerpt', 'insert_buttons_to_post_top');
                add_filter('the_content', 'insert_buttons_to_post_top');
            }
        } else if ($d[0] == 'archive' || $d[1] == 'archive' || $d[2] == 'archive' || $d[3] == 'archive' || $d[4] == 'archive' || $d[5] == 'archive') {
            if (is_archive()) {
                add_filter('the_excerpt', 'insert_buttons_to_post_top');
                add_filter('the_content', 'insert_buttons_to_post_top');
            }
        }
    }
}

function insert_buttons_to_post_top(){
   return "<div>Output</div>"
}

Currently this code shows no output. What is wrong here?

标签: wordpress
1条回答
Anthone
2楼-- · 2019-07-21 15:58

Do it like this by simply adding separate actions for each of your custom functions:

    add_action('wp', 'custom1');

    function custom1() {

          if ($d == 'post'){
             if (is_single()) {
                add_filter('the_content', 'insert_buttons_to_post_bottom');
             }
           }

    }

    add_action('wp', 'custom2');

    function custom2(){
       if ($d == 'page'){
             if (is_page()) {
                add_filter('the_content', 'insert_buttons_to_post_bottom');
             }
           }
    }

    add_action('wp', 'custom3');

    function custom3(){
    if ($d == 'archive'){
             if (is_archive()) {
                add_filter('the_content', 'insert_buttons_to_post_bottom');
             }
           }
    }

function insert_buttons_to_post_bottom(){
return "something";
}
查看更多
登录 后发表回答