maxxon15
maxxon15

Reputation: 1639

Wordpress add_meta_box does not do anything

I can't seem to get the Wordpress add_meta_box to work. It is adding the boxes in the edit page, but it isn't reflected in the input boxes anywhere.

How can I get this to work? Is there anything I'm doing wrong? I followed this tutorial.

// Add support for header images
if(function_exists('add_theme_support')){
  add_theme_support('post-thumbnails'); // Adds this for both pages and posts, For posts/page only, see https://codex.wordpress.org/Function_Reference/add_theme_support
}

// Callback for adding metaboxes
function actionblock_add_meta_box(){
  $screens = array( 'post', 'page' );
  foreach ( $screens as $screen ) {
    add_meta_box('action_block', 'Action Block', 'actionblock_meta_box_callback', $screen, 'normal'); // Add the action block to both post and page screens
  }
}

// Add meta boxes for action section on each post/page
add_action('add_meta_boxes', 'actionblock_add_meta_box');

function actionblock_meta_box_callback($post){
  // Security check
  wp_nonce_field('actionblock_save_meta_box_data', 'actionblock_meta_box_nonce');

  // Get values of the action block fields
  $action_prompt_text = get_post_meta($post->ID, 'actionblock_meta_prompt_text', true);
  $action_button_text = get_post_meta($post->ID, 'actionblock_meta_button_text', true);
  $action_button_link = get_post_meta($post->ID, 'actionblock_meta_button_link', true);


  // Display and populate fields from the database if it exists
  ?>
  <p>
    <label for="action_prompt_text">Action Prompt</label><br>
    <input class="widefat" type="text" name="action_prompt_text" id="action_prompt_text" placeholder="This should be short, to the point and less salesy." value="<?php echo esc_attr($action_prompt_text); ?>">
  </p>
  <p>
    <label for="action_button_text">Action Button Text</label><br>
    <input class="widefat" type="text" name="action_button_text" id="action_button_text" placeholder="This should prompt the visitor to take an action." value="<?php echo esc_attr($action_button_text); ?>">
  </p>
  <p>
    <label for="action_button_link">Action Button Link</label><br>
    <input class="widefat" type="url" name="action_button_link" id="action_button_link" placeholder="Copy and paste the link from the intended page." value="<?php echo esc_attr($action_button_link); ?>">
  </p>
  <?php

  // Callback for saving metaboxes
  function actionblock_save_meta_box_data($post_id) {

    // Security checks
    if(!isset($_POST['actionblock_meta_box_nonce'])) return;
    if(!wp_verify_nonce($_POST['actionblock_meta_box_nonce'], 'actionblock_save_meta_box_data')) return;
    if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;

    if ( isset( $_POST['post_type'] ) && 'page' == $_POST['post_type'] ) {
      if ( ! current_user_can( 'edit_page', $post_id ) ) {
        return;
      }
    } else {
      if ( ! current_user_can( 'edit_post', $post_id ) ) {
        return;
      }
    }

    // Do the save/update
    if(isset($_POST['action_prompt_text'])){
      update_post_meta($post_id, 'actionblock_meta_prompt_text', sanitize_text_field($_POST['action_prompt_text']));
    }
    if(isset($_POST['action_button_text'])){
      update_post_meta($post_id, 'actionblock_meta_button_text', sanitize_text_field($_POST['action_button_text']));
    }
    if(isset($_POST['action_prompt_link'])){
      update_post_meta($post_id, 'actionblock_meta_button_link', esc_url($_POST['action_prompt_link']));
    }
  }

  // Save action block details when the post is saved/updated
  add_action('save_post', 'actionblock_save_meta_box_data');

Upvotes: 0

Views: 1378

Answers (1)

Ashish Patel
Ashish Patel

Reputation: 3614

Try Below code :

// Add support for header images
if(function_exists('add_theme_support')){
add_theme_support('post-thumbnails'); // Adds this for both pages and posts, For posts/page only, see https://codex.wordpress.org/Function_Reference/add_theme_support
}

// Callback for adding metaboxes
function actionblock_add_meta_box(){
$screens = array( 'post', 'page' );
foreach ( $screens as $screen ) {
add_meta_box('action_block', 'Action Block', 'actionblock_meta_box_callback', $screen, 'normal'); // Add the action block to both post and page screens
}
}

// Add meta boxes for action section on each post/page
add_action('add_meta_boxes', 'actionblock_add_meta_box');

function actionblock_meta_box_callback($post){
// Security check
wp_nonce_field('actionblock_save_meta_box_data', 'actionblock_meta_box_nonce');

// Get values of the action block fields
$action_prompt_text = get_post_meta($post->ID, 'actionblock_meta_prompt_text', true);
$action_button_text = get_post_meta($post->ID, 'actionblock_meta_button_text', true);
$action_button_link = get_post_meta($post->ID, 'actionblock_meta_button_link', true);


// Display and populate fields from the database if it exists
?>
<p>
<label for="action_prompt_text">Action Prompt</label><br>
<input class="widefat" type="text" name="action_prompt_text" id="action_prompt_text" placeholder="This should be short, to the point and less salesy." value="<?php echo esc_attr($action_prompt_text); ?>">
</p>
<p>
<label for="action_button_text">Action Button Text</label><br>
<input class="widefat" type="text" name="action_button_text" id="action_button_text" placeholder="This should prompt the visitor to take an action." value="<?php echo esc_attr($action_button_text); ?>">
</p>
<p>
<label for="action_button_link">Action Button Link</label><br>
<input class="widefat" type="url" name="action_button_link" id="action_button_link" placeholder="Copy and paste the link from the intended page." value="<?php echo esc_attr($action_button_link); ?>">
</p>
<?php
}
// Callback for saving metaboxes
function actionblock_save_meta_box_data($post_id) {


// Security checks
if(!isset($_POST['actionblock_meta_box_nonce'])) return;
if(!wp_verify_nonce($_POST['actionblock_meta_box_nonce'], 'actionblock_save_meta_box_data')) return;
if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;

if ( isset( $_POST['post_type'] ) && 'page' == $_POST['post_type'] ) {
  if ( ! current_user_can( 'edit_page', $post_id ) ) {
    return;
  }
} else {
  if ( ! current_user_can( 'edit_post', $post_id ) ) {
    return;
  }
}

// Do the save/update
if(isset($_POST['action_prompt_text'])){
  update_post_meta($post_id, 'actionblock_meta_prompt_text', sanitize_text_field($_POST['action_prompt_text']));
}
if(isset($_POST['action_button_text'])){
  update_post_meta($post_id, 'actionblock_meta_button_text', sanitize_text_field($_POST['action_button_text']));
}
if(isset($_POST['action_button_link'])){
  update_post_meta($post_id, 'actionblock_meta_button_link', esc_url($_POST['action_button_link']));
}
}

// Save action block details when the post is saved/updated
add_action('save_post', 'actionblock_save_meta_box_data');

Upvotes: 2

Related Questions