如何使用REST API代替Get_Theme_mod()获取自定义徽标;

时间:2020-04-06 作者:sialfa

通常,我使用此代码段在自定义主题内设置自定义徽标。我是一个有主题设置API和设置API的noob,所以目前我没有主题选项页面。我正在开发vue。基于js的主题,我想使用axios获取所有数据。是否有一个REST端点我可以用来获取徽标,或者我需要注册一个自定义路径,就像我为menù和其他主题资源所做的那样?

<a class="navbar-brand ml-auto" href="<?php bloginfo(\'url\'); ?>">
      <?php $logo = wp_get_attachment_image_src( get_theme_mod(\'custom_logo\'), \'full\' ); ?>
      <?php if( $logo ): ?>
        <img src="<?php //echo $logo[0]; ?>" width="auto" height="75">
      <?php endif; ?>
      </a>

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

是否可以使用REST端点获取徽标

据我所知,没有一个是特定于主题mods的。

或者我需要注册一个自定义路由,就像我正在为菜单和其他主题资源注册一样?

我不会说是或否,但创建自定义端点很容易,而且您还可以以您喜欢的格式(字符串、对象、数组等)获取数据(在API响应中),所以为什么不这样做呢,您可以使用一些简单的方法,如:

function my_theme_register_rest_routes() {
    // For retrieving all theme mods.
    // Sample request URL: http://example.com/wp-json/mytheme/v1/settings?_wpnonce=XXXXXXXXXX
    register_rest_route( \'mytheme/v1\', \'/settings\', [
        \'methods\'  => \'GET\',
        \'callback\' => function () {
            return get_theme_mods();
        },
        \'permission_callback\' => function () {
            return current_user_can( \'manage_options\' );
        },
    ] );

    // For retrieving a specific theme mod.
    // Sample request URL: http://example.com/wp-json/mytheme/v1/settings/custom_logo?_wpnonce=XXXXXXXXXX
    register_rest_route( \'mytheme/v1\', \'/settings/(?P<name>[a-zA-Z0-9\\-_]+)\', [
        \'methods\'  => \'GET\',
        \'callback\' => function ( $request ) {
            return get_theme_mod( $request->get_param( \'name\' ) );
        },
        \'permission_callback\' => function () {
            return current_user_can( \'manage_options\' );
        },
    ] );
}
add_action( \'rest_api_init\', \'my_theme_register_rest_routes\' );
但不管怎样,我想this question 可能会帮助您。:)