在 Kirki 选择或文本输入中获取 WordPress 页面

问题描述 投票:0回答:1

我之前使用过 Redux 选项框架,并使用它的功能 [data] 参数来选择页面,使用下拉列表从下拉列表中选择 WordPress 页面,它为我们提供了页面 ID,我们可以在前端使用该页面 ID 创建锚链接。现在我正在尝试 Kirki 定制器框架,但我没有找到任何选项可以这样做,我不知何故发现我们可以通过 SELECT 选项中的“选择”参数来做到这一点,但无法弄清楚如何做到这一点?有人可以帮忙吗?

wordpress frameworks wordpress-theming
1个回答
0
投票

在 Kirki 中,您可以使用“choices”参数在 WordPress 定制器中创建下拉选择字段。要使用页面 ID 创建锚链接,您可以按照以下步骤操作:

首先,确保您已在 WordPress 主题中安装并正确配置了 Kirki。

在主题的functions.php或单独的定制器配置文件中为下拉选择字段定义一个部分和一个控件:

// Replace 'your_theme_prefix' with your actual theme prefix.
Kirki::add_config( 'your_theme_prefix', array(
    'capability'  => 'edit_theme_options',
    'option_type' => 'theme_mod',
) );

Kirki::add_section( 'page_select_section', array(
    'title' => esc_html__( 'Page Selector', 'your_theme_textdomain' ),
    'panel' => 'your_customizer_panel_id', // Replace with your actual panel ID.
) );

Kirki::add_field( 'your_theme_prefix', array(
    'type'        => 'select',
    'settings'    => 'selected_page',
    'label'       => esc_html__( 'Select a Page', 'your_theme_textdomain' ),
    'section'     => 'page_select_section',
    'default'     => '',
    'choices'     => kirki_get_pages(), // This function retrieves a list of pages.
) );

在上面的代码中,将 'your_theme_prefix' 替换为您的实际主题前缀,并根据需要调整其他设置。

创建一个回调函数来检索“choices”参数的页面列表。您可以将此函数放置在您的functions.php 文件或自定义函数文件中:

function kirki_get_pages() {
    $pages = get_pages();
    $page_choices = array();

    foreach ( $pages as $page ) {
        $page_choices[ $page->ID ] = $page->post_title;
    }

    return $page_choices;
}

现在,您在 WordPress 定制器中有一个下拉选择字段,其中列出了您网站上的所有页面。用户可以选择一个页面,其ID将保存在'selected_page' theme_mod选项中。

要在前端使用所选页面 ID 创建锚链接,您可以使用 get_theme_mod('selected_page') 检索所选页面 ID,然后相应地构建锚链接:

$selected_page_id = get_theme_mod('selected_page');
if (!empty($selected_page_id)) {
    $anchor_link = get_permalink($selected_page_id) . '#your-anchor';
    echo '<a href="' . esc_url($anchor_link) . '">Link to Selected Page with Anchor</a>';
}

将“your-anchor”替换为您要使用的实际锚点。

© www.soinside.com 2019 - 2024. All rights reserved.