2015-07-20 101 views
0

我有下面的代码,一切正常保存,但我不能让它在网站的主页上正确显示。Wordpress中显示Metabox的问题

问题是,它显示后的网页上一倍在主页上的一个随机地点显示出来。不过,我希望它只显示在主页上的某个地方。

function home_page_position_get_meta($value) { 
    global $post; 

    $field = get_post_meta($post->ID, $value, true); 
    if (! empty($field)) { 
     return is_array($field) ? stripslashes_deep($field) : stripslashes(wp_kses_decode_entities($field)); 
    } else { 
     return false; 
    } 
} 

function home_page_position_add_meta_box() { 
    add_meta_box(
     'home_page_position-home-page-position', 
     __('Home Page Position', 'home_page_position'), 
     'home_page_position_home_page_position_html', 
     'post', 
     'side', 
     'default' 
    ); 
} 
add_action('add_meta_boxes', 'home_page_position_add_meta_box'); 


function home_page_position_home_page_position_html($post) { 
    wp_nonce_field('_home_page_position_home_page_position_nonce', 'home_page_position_home_page_position_nonce'); 
    $home_page_position_home_page_position_box_position_value = get_post_meta($post->ID,'home_page_position_home_page_position_box_position',true); 
?> 

    <p> 
     <label for="home_page_position_home_page_position_box_position"><?php _e('Box Position', 'home_page_position'); ?></label><br> 
     <select name="home_page_position_home_page_position_box_position"> 

      <option id='none-none' value='none' name='none_' <?php selected($home_page_position_home_page_position_box_position_value, 'none'); ?> >None</option> 
      <option id='box-01' value='box01' name='box_01' <?php selected($home_page_position_home_page_position_box_position_value, 'box01'); ?> >Box 01</option> 
      <option id='box-02' value='box02' name='box_02' <?php selected($home_page_position_home_page_position_box_position_value, 'box02'); ?> >Box 02</option> 
      <option id='box-03' value='box03' name='box_03' <?php selected($home_page_position_home_page_position_box_position_value, 'box03'); ?> >Box 03</option> 

     </select> 
    </p> <p> 

     <label for="home_page_position_home_page_position_page_title"><?php _e('Page Title', 'home_page_position'); ?></label><br> 
     <input type="text" name="home_page_position_home_page_position_page_title" id="home_page_position_home_page_position_page_title" value="<?php echo home_page_position_get_meta('home_page_position_home_page_position_page_title'); ?>"> 
    </p> <p> 

     <label for="home_page_position_home_page_position_introduction"><?php _e('Introduction', 'home_page_position'); ?></label><br> 
     <textarea name="home_page_position_home_page_position_introduction" id="home_page_position_home_page_position_introduction" ><?php echo home_page_position_get_meta('home_page_position_home_page_position_introduction'); ?></textarea> 

    </p> <p> 

     <label for="home_page_position_home_page_position_link_to_page"><?php _e('Link To Page', 'home_page_position'); ?></label><br> 
     <input type="text" name="home_page_position_home_page_position_link_to_page" id="home_page_position_home_page_position_link_to_page" value="<?php echo home_page_position_get_meta('home_page_position_home_page_position_link_to_page'); ?>"> 
    </p><?php 
} 


function home_page_position_home_page_position_save($post_id) { 
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return; 
    if (! isset($_POST['home_page_position_home_page_position_nonce']) || ! wp_verify_nonce($_POST['home_page_position_home_page_position_nonce'], '_home_page_position_home_page_position_nonce')) return; 
    if (! current_user_can('edit_post')) return; 

    if (isset($_POST['home_page_position_home_page_position_box_position'])) 
     update_post_meta($post_id, 'home_page_position_home_page_position_box_position', esc_attr($_POST['home_page_position_home_page_position_box_position'])); 

    if (isset($_POST['home_page_position_home_page_position_page_title'])) 
     update_post_meta($post_id, 'home_page_position_home_page_position_page_title', esc_attr($_POST['home_page_position_home_page_position_page_title'])); 

    if (isset($_POST['home_page_position_home_page_position_introduction'])) 
     update_post_meta($post_id, 'home_page_position_home_page_position_introduction', esc_attr($_POST['home_page_position_home_page_position_introduction'])); 

    if (isset($_POST['home_page_position_home_page_position_link_to_page'])) 
     update_post_meta($post_id, 'home_page_position_home_page_position_link_to_page', esc_attr($_POST['home_page_position_home_page_position_link_to_page'])); 
} 
add_action('save_post', 'home_page_position_home_page_position_save'); 


function cd_display_quote($value) 
{ 
    // We're in the loop, so we can grab the $post variable 
    global $post; 

    $position = get_post_meta($post->ID, 'home_page_position_home_page_position_box_position', true); 
    $pTitle = get_post_meta($post->ID, 'home_page_position_home_page_position_page_title', true); 
    $intro = get_post_meta($post->ID, 'home_page_position_home_page_position_introduction', true); 
    $link = get_post_meta($post->ID, 'home_page_position_home_page_position_link_to_page', true); 

    if($position != 'none') { 
     echo $position; 
     echo $pTitle; 
     echo $intro; 
     echo $link;   
    } 


    // Return the values: quote first, then the content 
    return $value; 
} 
add_action('the_content', 'cd_display_quote'); 

回答

0

回答

你的数据相呼应,而不是从法这意味着你的元数据将永远是输出前的内容应该是输出返回它。

相反,尝试下面的代码输出内容:

function cd_display_quote($value) 
{ 
    // We're in the loop, so we can grab the $post variable 
    global $post; 

    $position = get_post_meta($post->ID, 'home_page_position_home_page_position_box_position', true); 
    $pTitle = get_post_meta($post->ID, 'home_page_position_home_page_position_page_title', true); 
    $intro = get_post_meta($post->ID, 'home_page_position_home_page_position_introduction', true); 
    $link = get_post_meta($post->ID, 'home_page_position_home_page_position_link_to_page', true); 

    $prepend = ''; 
    if($position != 'none') { 
     $prepend .= $position; 
     $prepend .= $pTitle; 
     $prepend .= $intro; 
     $prepend .= $link;   
    } 


    // Return the values: quote first, then the content 
    return prepend . $value; 
} 
add_filter('the_content', 'cd_display_quote'); 

说明:

您可能注意到,我已经改变了add_actionadd_filterthe_content - 这不是重要但这是很好的做法。你看,WordPress实际上运行相同的代码为add_actionadd_filter - 唯一真正的区别是'行动'不必返回一个值,他们被用作钩子来运行一些代码或执行任务在一个特定的时间。另一方面,“过滤器”就是这样 - 一个值被传递给一个回调方法,并且预期将返回一个过滤值。

这摘自这篇文章(http://www.zell-weekeat.com/wordpress-actions-and-filters/)概括起来相当不错:

操作

  • 如果有什么东西是添加与ADD_ACTION宣布
  • ()。
  • 与do_action()一起使用。

过滤器

  • 如果有什么东西是改变
  • 与apply_filters声明()。
  • 与add_filters()一起使用。

希望这会有所帮助。

+0

非常感谢!仍在学习并试图找出问题。非常apprecaited。 –