Php 数组(类)在wordpress中是如何工作的?

Php 数组(类)在wordpress中是如何工作的?,php,wordpress,Php,Wordpress,我正在尝试修改wordpress插件以获取自定义类别。因此,当调用random_post_链接时,我可以使用random_post_链接(“random link”),添加自定义类别。3是类别名称 下面的插件是如何创建Random_Post_Link类的新对象的?我以为您通过以下操作创建了新对象: $a=新的随机发布链接 但我在插件中看不到这一点。我认为它使用一个钩子在init函数中创建了一个新对象: 添加动作('init',数组(类,'jump') 如果是这种情况,我如何向跳转函数添加参数 我

我正在尝试修改wordpress插件以获取自定义类别。因此,当调用random_post_链接时,我可以使用random_post_链接(“random link”),添加自定义类别。3是类别名称

  • 下面的插件是如何创建Random_Post_Link类的新对象的?我以为您通过以下操作创建了新对象:

    $a=新的随机发布链接

  • 但我在插件中看不到这一点。我认为它使用一个钩子在init函数中创建了一个新对象:

    添加动作('init',数组(,'jump')

    如果是这种情况,我如何向跳转函数添加参数

    我想我知道add_操作是如何工作的,第二个参数应该是函数名,它是如何工作的 “数组(,'jump')”工作吗

    以下是插件的完整代码:

    function random_post_link($text = 'Random Post',$the_cat = 36) {
        printf('<a href="%s">%s</a>', get_random_post_url(), $text);
        $the_category = $the_cat;
    }
    
    function get_random_post_url() {
        return trailingslashit(get_bloginfo('url')) . '?' . Random_Post_Link::query_var;
    }
    
    
    class Random_Post_Link {
        const query_var = 'random';
        const name = 'wp_random_posts';
        public $the_category;
    
        function init() {
            add_action('init', array(__CLASS__, 'jump'));
    
            // Fire just after post selection
            add_action('wp', array(__CLASS__, 'manage_cookie'));
        }
    
        // Jump to a random post
        function jump() {
            if ( ! isset($_GET[self::query_var]) )
                return;
    
            $args = apply_filters('random_post_args', array(
                'post__not_in' => self::read_cookie(),
            ));
    
            $args = array_merge($args, array(
                'orderby' => 'rand',
                'cat' => $the_category,
                'showposts' => 1,
            ));
    
            $posts = get_posts($args);
    
            if ( empty($posts) ) {
                self::update_cookie(array());
                unset($args['post__not_in']);
    
                $posts = get_posts($args);
            }
    
            if ( empty($posts) )
                wp_redirect(get_bloginfo('url'));
    
            $id = $posts[0]->ID;
    
            wp_redirect(get_permalink($id));
            die;
        }
    
        // Collect post ids that the user has already seen
        function manage_cookie() {
            if ( ! is_single() )
                return;
    
            $ids = self::read_cookie();
            $id = $GLOBALS['posts'][0]->ID;
    
            if ( count($ids) > 200 )
                $ids = array($id);
            elseif ( ! in_array($id, $ids) )
                $ids[] = $id;
    
            self::update_cookie($ids);
        }
    
        private function read_cookie() {
            return explode(' ', @$_COOKIE[self::name]);
        }
    
        private function update_cookie($ids) {
            setcookie(self::name, trim(implode(' ', $ids)), 0, '/');
        }
    }
    
    Random_Post_Link::init();
    
    function random\u post\u链接($text='random post',$the\u cat=36){
    printf(“”,get_random_post_url(),$text);
    $the_category=$the_cat;
    }
    函数get\u random\u post\u url(){
    返回trailingslashit(get_bloginfo('url')).?'.Random_Post_Link::query_var;
    }
    类随机后链接{
    const query_var='random';
    const name='wp_random_posts';
    公帑属"大学类别;;
    函数init(){
    添加动作('init',数组('uuuuu类,'uuuuuu',跳转');
    //选择后立即开火
    添加动作('wp',数组('manage_cookie');
    }
    //跳转到一个随机的帖子
    函数跳转(){
    if(!isset($\u GET[self::query\u var]))
    返回;
    $args=apply_filters('random_post_args',数组(
    'post\u not\u in'=>self::read\u cookie(),
    ));
    $args=array\u merge($args,array(
    'orderby'=>'rand',
    “猫”=>$U类,
    “展示柱”=>1,
    ));
    $posts=get_posts($args);
    如果(空($员额)){
    self::更新_cookie(数组());
    未设置($args['post\u not\u in']);
    $posts=get_posts($args);
    }
    如果(空($员额))
    wp_重定向(get_bloginfo('url'));
    $id=$posts[0]->id;
    wp_重定向(get_permalink($id));
    死亡
    }
    //收集用户已经看到的帖子ID
    函数管理_cookie(){
    如果(!is_single())
    返回;
    $ids=self::read_cookie();
    $id=$GLOBALS['posts'][0]->id;
    如果(计数($ids)>200)
    $id=数组($id);
    elseif(!in_数组($id,$id))
    $id[]=$id;
    self::更新cookie($id);
    }
    私有函数read_cookie(){
    返回explode(“”,@$_COOKIE[self::name]);
    }
    私有函数更新\u cookie($ids){
    setcookie(self::name,trim(内爆(''.$ids)),0,'/');
    }
    }
    随机后链接::init();
    
    一些WordPress的作者使用PHP中的类结构基本上减少了全局变量。该类是作为排序的“单例”,因此通常不会实例化(代码调用底部的
    Random\u Post\u Link::init();
    )类函数被视为类成员,而不是实例成员,有点像其他语言中的Math.max()

    php关键字
    \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

    如果需要解除挂钩,请尝试
    remove\u操作('init',array('Random\u Post\u Link',jump');

    (还要注意,以这种方式使用的方法应该声明为
    静态函数jump(){…}

    另请进一步澄清:


    数组('class','function')
    语法是PHP的东西,而WordPress操作需要一个
    可调用的
    ,它可以是任何PHP可调用的东西。

    如果混乱的WP中有任何类,我会非常惊讶。当你写
    时,你是指
    还是指
    \uuuuuu类
    。考虑到你的问题标题,这是误导性的这是插件源代码的直接副本,因此是的,类(带下划线)下划线倾向于在此处加粗文本,因此如果您试图编写由它们包围的类,请尝试使用“backtick”引号,将其标记为代码:`
    \uuuuuu CLASS\uuu
    `