【问题标题】:Wordpress settings menu not displaying correctlyWordpress 设置菜单未正确显示
【发布时间】:2018-10-31 01:37:15
【问题描述】:

我创建了一个带有标签和一些内容的设置菜单。我没有收到任何 PHP 错误,但是当我加载页面时,我的设置如下所示:

如您所见,我的内容位于左下角的选项卡之外。我绝对不确定这里有什么问题。这是我的代码:


我在这里注册新的菜单页面:

add_action( 'admin_menu', 'register_settings_submenu' );
function register_settings_submenu() {
    add_submenu_page( 'options-general.php', 'Additional Settings', 'Additional Settings', 'manage_options', 'settings-submenu', 'settings_page' );
}

这是上面 add_action 的相关函数:

function settings_page() {
    global $settings_active_tab;

    $settings_active_tab = isset( $_GET['tab'] ) ? $_GET['tab'] : 'general'; ?>

    <h2 class="nav-tab-wrapper">
        <?php
        do_action( 'payments_tab' )
        ?>
    </h2>

    <?php

    do_action( 'payments_content' );

}

这是选项卡的功能:

add_action( 'payments_tab', 'payments_tab', 1 );
function payments_tab() {
    global $settings_active_tab; ?>
    <a class="nav-tab <?php echo $settings_active_tab === 'payments' || '' ? 'nav-tab-active' : ''; ?>"
       href="<?php echo admin_url( 'admin.php?page=settings-submenu&tab=payments' ); ?>"><?php _e( 'Zahlungen ', 'woocommerce' ); ?> </a>
    <?php

}

这是内容的功能:

add_action( 'payments_content', 'payments_content' );
function payments_content() {
    global $settings_active_tab;
    if ( '' || 'payments' !== $settings_active_tab ) {
        return;
    } ?>

    <div class="wrap">
        <h2>Zahlungen</h2>
        <form method="post" action="options.php">
            <table class="form-table">
                <tbody>
                <?php
                settings_fields( "payments" );
                do_settings_sections( "payment-options" );
                ?>
                </tbody>
            </table>
            <?php submit_button(); ?>
        </form>
    </div>
<?php }

此函数获取此选项卡的内容并对其进行初始化:

add_action( "admin_init", "display_settings_pages_content" );
function display_settings_pages_content() {

    payment_settings_element();
}

这是功能 payment_settings_element:

function payment_settings_element() {

    $settings = array(
        'field1' => array(
            'name'     => __( 'Field 1', 'settings' ),
            'id'       => 'wc_tab_field1',
            'type'     => 'text',
            'desc_tip' => __( 'Im a short desc', 'settings' ),
            'desc'     => __( '%', 'settings' )
        ),
        'field2'      => array(
            'name'     => __( 'Field 2', 'settings' ),
            'id'       => 'wc_tab_field2',
            'type'     => 'text',
            'desc_tip' => __( 'Another short desc', 'settings' ),
            'desc'     => __( '$', 'settings' )
        )
    );

    ?>

    <?php
    foreach ( $settings as $key => $setting ) {
        add_settings_field( $key, $setting['name'], createInput( $setting['name'], $setting['id'], $setting['type'], $setting['desc'] ), 'payment-options', 'payments' );
        register_setting( 'payments', $key );
    } ?>

<?php }

最后是创建新设置元素的函数:

function createInput( $name, $id, $type, $desc ) {
    ?>
    <tr valign="top">
        <th scope="row" class="titledesc">
            <label for="<?php echo $id; ?>"><?php echo $name; ?></label>
        </th>
        <td class="forminp forminp-text">
            <input type="<?php echo $type; ?>" name="<?php echo $id; ?>" id="<?php echo $id; ?>"
                   value="<?php echo get_option( $id ); ?>">
            <span class="description"><?php echo $desc; ?></span>
        </td>
    </tr>

    <?php
}

我完全不知道为什么输入在只有表格结构但没有条目的选项卡内容之外。我哪里错了?

【问题讨论】:

  • 我在管理面板中看不到其他设置。
  • 因为他创造了它。它不是默认的 WordPress 页面。

标签: php arrays wordpress


【解决方案1】:

你在这里用错了钩子:

add_action( "admin_init", "display_settings_pages_content" );

试试这个:

add_action( "payments_content", "display_settings_pages_content" );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多