building plugin and it is displaying above plugins page

this is the issue:

add_action('admin_menu', 'bittech_login_settings');



function bittech_login_settings() {



add_menu_page('BitTech Login Settings', 
              'BitTech Login Settings', 
              'administrator', 
              'bittech_settings', 
              'bittech_login_settings');

$filename = "../wp-content/plugins/bittech_login/include/config.php";

$contents = file_get_contents($filename);

if (isset($_POST['field'])) {
   file_put_contents($filename, $_POST['field']);
}
?>

<form action="" method="POST">
    <textarea name="field" cols="300" rows="200"><?php 
    echo $contents; 
    ?></textarea><br>
    <input type="submit" value="Save">
</form>
<?php
}
?>

the code is working correctly but when it is put in it appears above the plugin panel. i was wondering what the fix for this was. that way i dont have this issue in the future. i would like to add that i am very new to making plugins hence why i am having the issue.

Related posts

2 comments

  1. You’re using add_menu_page wrong. The function bittech_login_settings should be only:

    function bittech_login_settings() {
        add_menu_page(
            'BitTech Login Settings', 
            'BitTech Login Settings', 
            'add_users', 
            'bittech_settings', 
            'bittech_login_settings_callback'
        );
    }
    
    function bittech_login_settings_callback() {
        // content of the menu
    }
    

    And put the contents of the page in the callback function bittech_login_settings_callback. Also, these lines don’t make much sense:

    $filename = "../wp-content/plugins/bittech_login/include/config.php";
    $contents = file_get_contents($filename);
    if($_POST) file_put_contents($filename, $_POST['field']);
    

    You should probably store that field in the database with update_option and retrieve it with get_option().

Comments are closed.