如何在 Wordpress rest_api_init 回调函数中传递参数

Posted

技术标签:

【中文标题】如何在 Wordpress rest_api_init 回调函数中传递参数【英文标题】:How to pass a parameter in Wordpress rest_api_init callback function 【发布时间】:2021-02-08 22:26:11 【问题描述】:

我有 1 个问题一直在尝试解决。当我搜索这样做时,我正在尝试遵循一些示例,但我并不是很成功......一直在尝试遵循这样的东西...... https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-custom-endpoints/

    如何在回调中传递参数/args

下面的这段代码确实有效。我想要的逻辑是,当您选择一天(Y-m-d)格式时,它会返回从开始时间到管理员用户在 wordpress 中选择的结束时间的所有可用时间。

这是我的 rest_api_init

    add_action( 'rest_api_init', function () 
      register_rest_route( 'myplugin/v1', '/day/(?P<id>\d+)', array(
        'methods' => 'GET',
        'callback' => 'my_awesome_func',
        ) );
 );

这里是回调函数

function my_awesome_func($request) 
        $selected_day = '2020-05-05';
      $startTime = esc_attr( get_option( 'start_time' )); //this works can hard coded as (10:30)
      $endTime = esc_attr( get_option( 'end_time' )); // also works can hard coded (20:00)
      $minutesApart = esc_attr( get_option( 'minutes_between')); //also works hard coded (15)
      $data = array();
              $exploded_daydate = explode('-', $selected_day);
              $start_time_raw = $startTime;
              $end_time_raw = $endTime;
              $start_time_Exploded = (explode(":",$start_time_raw));
              $end_time_Exploded = (explode(":",$end_time_raw));
              $loopStart = mktime($start_time_Exploded[0], $start_time_Exploded[1], 0, $exploded_daydate[1], $exploded_daydate[2], $exploded_daydate[0]);
              $loopEnd = mktime($end_time_Exploded[0], $end_time_Exploded[1], 0, $exploded_daydate[1], $exploded_daydate[2], $exploded_daydate[0]);
              $i=0;
              while ($loopStart <= $loopEnd) 
                $data[$i] = date("Y-d-m h:i:s",$loopStart);
              $loopStart = $loopStart + ($minutesApart *60);
              $i++;
              
              return $data;
              

现在我对 ($selected_day = '2020-05-05';) 进行了硬编码,但我希望通过在 URL 端点末尾接受 (Y-m-d) 格式来使端点 url 起作用。我就是想不通……这一切都是新手……

任何帮助都会很好。

【问题讨论】:

【参考方案1】:

没关系...我想通了...这是我正在寻找的解决方案

add_action( 'rest_api_init', function () 
  register_rest_route( 'myplugin/v1', '/day/(?P<day>([12]\d3-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])))', array(
    'methods' => 'GET',
    'callback' => 'my_awesome_func',
    
  ) );
 );

    function my_awesome_func($request) 
        $selected_day = $request['day'];
      $startTime = esc_attr( get_option( 'start_time' ));
      $endTime = esc_attr( get_option( 'end_time' ));
      $minutesApart = esc_attr( get_option( 'minutes_between'));
      $data = array();
              $exploded_daydate = explode('-', $selected_day);
              $start_time_raw = $startTime;
              $end_time_raw = $endTime;
              $start_time_Exploded = (explode(":",$start_time_raw));
              $end_time_Exploded = (explode(":",$end_time_raw));
              $loopStart = mktime($start_time_Exploded[0], $start_time_Exploded[1], 0, $exploded_daydate[1], $exploded_daydate[2], $exploded_daydate[0]);
              $loopEnd = mktime($end_time_Exploded[0], $end_time_Exploded[1], 0, $exploded_daydate[1], $exploded_daydate[2], $exploded_daydate[0]);
              $i=0;
              while ($loopStart <= $loopEnd) 
                $data[$i] = date("Y-m-d h:i:s",$loopStart);
              $loopStart = $loopStart + ($minutesApart *60);
              $i++;
              
              return $data;
              

【讨论】:

以上是关于如何在 Wordpress rest_api_init 回调函数中传递参数的主要内容,如果未能解决你的问题,请参考以下文章

wordpress多作者显示问题

wordpress上面如何在导航栏上面添加子分类

如何在WordPress菜单中添加搜索框?

如何在wordpress 3.0中使用自定义分类法

wordpress如何添加文章页面?

如何在 Wordpress 插件中使用 ReactJS