2015-07-20 2 views
0

У меня есть следующий код, все сохраняет правильно, но я не могу правильно отобразить его на главной странице веб-сайта.Проблемы с отображением Metabox в Wordpress

Проблема заключается в том, что отображается в два раза на страницу сообщения и появляется в случайном месте на главной странице. Однако я хочу, чтобы он отображался только в определенном месте на домашней странице.

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_action к add_filter для the_content - это не жизненно но это хорошая практика. Вы видите, что WordPress фактически выполняет тот же код для add_actionиadd_filter - единственная реальная разница в том, что «действия» не должны возвращать значение, они используются как крючки для запуска какого-либо кода или выполнения задачи на конкретное время. «Фильтры», с другой стороны, точно такие - значение передается методу обратного вызова, и ожидается, что отфильтрованное значение будет возвращено.

Этот отрывок из этой статьи (http://www.zell-weekeat.com/wordpress-actions-and-filters/) суммирует это довольно хорошо:

Действия

  • Когда что-то должно быть добавлено
  • объявлен с add_action().
  • б/у использование do_action().

Фильтры

  • Когда что-то должно быть изменены
  • объявленных с apply_filters().
  • используется с add_filters().

Надеюсь, это поможет.

+0

Большое вам спасибо! Все еще учится и пытается понять, что происходит. очень оценен. –

Смежные вопросы