创建更改URL终结点的快捷代码

时间:2019-08-30 作者:Erik James Robles

我从api调用数据,并将其作为数组循环。问题是,我一次只想调用一个单独的概要文件,并且每个概要文件都有一个快捷码。我已经创建了shortcode函数,它确实有效。然而,我必须要么调用循环中的所有概要文件,要么通过if语句只调用一个概要文件。这显然不是我想要的。我希望能够将:player\\u number=664(例如)添加到端点url的末尾。这是我现在的代码:

function individualPlayer(){
    $html .= \'<div class="s-players">
                <div class="container">\';

    $responseindividualPlayer = wp_remote_get(\'http://api-address-hidden-for-security/statsajax.php?action=rankedplayerslist&eventid=5\');

    $array = json_decode(utf8_encode($responseindividualPlayer[\'body\']),TRUE);
    foreach($array as $player){
        if($player[\'Numero\'] == 707) {
        $html .= \'
            <p>\'.$player[\'Evento\'].\'</p>
            <p>\'.(int)$player[\'Numero\'].\'</p>
            <p>\'.$player[\'Jugador\'].\'</p>\';
        }
    }
 return $html .\'</div></div>\';
}
add_shortcode(\'individualPlayer\', \'individualPlayer\');
我想删除if语句。URL提供事件ID,后跟?player\\u number=然后是播放器编号。

我很想拥有它[shortcode \'player_number=123\'] 如果可能的话。如果不可能,请有人帮我确定正确的方向好吗?提前谢谢你。埃里克·罗伯斯

1 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

我很难说远程API是否只允许您获取给定球员的统计数据,但是。。。还有另一种方法,我会尽可能减少对远程API的请求数。。。

class Remote_Player_API {
    private static $instance;

    private $remote_data;

    public static function init() {
        if ( ! self::$instance ) {
            self::$instance = new Remote_Player_API();
        }
    }

    protected function __construct() {
        $this->register_shortcodes();
    }

    protected function get_remote_api_data() {
        // you can also use transients here and cache remote responses for some time to optimize API calls even more
        if ( ! $this->remote_data ) {  // obtain remote data only, if we haven\'t done it already, so the request will be done only once
            $response = wp_remote_get(\'http://api-address-hidden-for-security/statsajax.php?action=rankedplayerslist&eventid=5\');
            $this->remote_data = json_decode( utf8_encode( $response[\'body\'] ), TRUE );
        }
        return $this->remote_data;
    }

    protected function register_shortcodes() {
        add_shortcode( \'individualPlayer\', array( $this, \'shortcode_callback_individualPlayer\' ) );
    }

    public function shortcode_callback_individualPlayer( $atts ) {
        $atts = shortcode_atts( array(
            \'player_number\' => 0,  // you have to pass player_number as attribute
        ), $atts );
        ob_start();
        ?>
        <div class="s-players">
            <div class="container">
                <?php
                    foreach ( $this->get_remote_api_data() as $player ) :
                        if ( $player[\'Numero\'] != $atts[\'player_number\'] ) continue;
                ?>
                <p><?php echo esc_html( $player[\'Evento\'] ); ?></p>
                <p><?php echo (int)$player[\'Numero\']; ?></p>
                <p><?php echo esc_html( $player[\'Jugador\'] ); ?></p>
                <?php endforeach; ?>
            </div>
        </div>
        <?php
        return ob_get_clean();
    }
}
Remote_Player_API::init();
免责声明:我在这里写了这段代码,所以可能有一些拼写错误;)

相关推荐

多站点安装问题和REST API请求的403错误

我已将WP设置为具有子域的多站点安装。站点网络和每个站点的仪表板都工作正常,但我在父站点上使用块编辑器时遇到的错误除外。所以我有wyamazaki。fi作为我的主域,希望创建两个网站,一个用于博客,另一个用于使用多站点的公司网站。我在cPanel中设置了通配符子域,重定向似乎正在工作。每当我在主站点上创建/编辑页面时,块编辑器都会失败,错误为“更新失败”。我检查了Chrome上的控制台,似乎所有的API请求都导致了403错误。(404是我在.htaccess中测试不同重写基的时候)我已经检查了我的。hta