2013-01-15 18 views
0

Я успешно вытащил пользовательский тип сообщения в раскрывающееся меню, которое находится в пользовательском мета-окне. Однако, когда вы показываете его на передней панели, я также хотел бы предоставить ссылку на фактический пост, а не только на имя сообщения. Поэтому я предполагаю, что мне нужно сохранить это как массив? Возможно ли это через раскрывающийся список? Смущенный тем, как я должен подходить к этому. Любая помощь приветствуется.Сохранить массив из выпадающего меню в Wordpress

Вот то, что я до сих пор:

// Add Meta Box To Select Overseeing Pastor 
add_action('admin_init', 'ministry_select_add_meta'); 
function ministry_select_add_meta(){ 
    add_meta_box('ministry_select_post', __('Overseeing Pastor'), 'ministry_select_meta', 'ministry', 'side'); 
} 

function ministry_select_meta($post) { 
    $values = get_post_custom($post->ID); 
    $selected = isset($values['pastor_select']) ? esc_attr($values['pastor_select'][0]) : ''; 
    wp_nonce_field('my_meta_box_nonce', 'meta_box_nonce'); 
    ?> 
     <select name="pastor_select"> 
      <?php 
      $args = array(
       'post_type' => 'employee', 
       'position' => 'pastor' 
      ); 
      $pastorList = new WP_Query($args); while ($pastorList->have_posts()) : $pastorList->the_post(); 
       $is_selected = (get_the_title() == $selected) ? 'selected="selected"' : ''; 
       echo '<option value="'.get_the_title().'" '.$is_selected.'>'.get_the_title().'</option>'; 
      endwhile; wp_reset_postdata(); 
      ?> 
     </select> 
    <?php 
} 

add_action('save_post', 'ministry_select_save'); 
function ministry_select_save($post_id) 
{ 
    // Stop If Autosaving 
    if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return; 

    // Stop If Nonce Can't Be Verified 
    if(!isset($_POST['meta_box_nonce']) || !wp_verify_nonce($_POST['meta_box_nonce'], 'my_meta_box_nonce')) return; 

    // Stop If Unauthorized User 
    if(!current_user_can('edit_post')) return; 

    // Make Sure Data Is Set Then Save  
    if(isset($_POST['pastor_select'])) 
     update_post_meta($post_id, 'pastor_select', esc_attr($_POST['pastor_select'])); 
} 
+0

почему вы хотите сохранить ссылку? и как работает раскрывающийся список? – Reigel

+0

Я хочу, чтобы у вас была возможность указать ссылку на переднем конце, чтобы она попала в профиль Пастора. – souporserious

+0

Что вы хотите - это перейти к URL-адресу публикации, когда в раскрывающемся списке выбрано название должности? – leticia

ответ

0

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

Это мой модифицированный код

<select name="pastor_select"> 
    <?php 
    $args = array(
     'post_type' => 'employee', 
     'position' => 'pastor' 
    ); 
    $pastorList = new WP_Query($args); while ($pastorList->have_posts()) : $pastorList->the_post(); 
     $employeeID = get_the_ID(); // THIS FIXED THE PROBLEM 
     $is_selected = ($employeeID == $selected) ? 'selected="selected"' : ''; 
     echo '<option value="'.$employeeID.'" '.$is_selected.'>'.get_the_title().'</option>'; 
    endwhile; wp_reset_postdata(); 
    ?> 
</select> 

И это, как я вызываю его на переднем конце

<?php 
$id = $post_meta_data['pastor_select'][0]; 
echo '<a href="'.get_permalink($id).'">'; 
echo get_the_title($id); 
echo '</a>'; 
?> 
1

Чтобы получить ссылку на сообщение, вы можете использовать get_permalink function

<?php $permalink = get_permalink(); ?> 

или как это, если вы находитесь за пределами петли

<?php $permalink = get_permalink($post->ID); ?> 

Вы можете использовать его для печати в любом месте вашего HTML-кода.

Если то, что вы хотите перейти на URL сообщения, когда сообщение Название выбрано в ниспадающих вы можете использовать код JavaScript, чтобы сделать это, делать что-то вроде:

<select name="pastor_select" onchange='location=this.options[this.selectedIndex].value;'> 
      <?php 
      $args = array(
       'post_type' => 'employee', 
       'position' => 'pastor' 
      ); 
      $pastorList = new WP_Query($args); while ($pastorList->have_posts()) : $pastorList->the_post(); 
       $is_selected = (get_the_title() == $selected) ? 'selected="selected"' : ''; 
       echo '<option value="'.get_permalink().'" '.$is_selected.'>'.get_the_title().'</option>'; 
      endwhile; wp_reset_postdata(); 
      ?> 
     </select> 

Если то, что вы хотите сохранить некоторая информация POST, рекомендуется сохранить идентификатор POST, так что позже вы сможете получить любые данные для этого POST, что, если вы хотите сохранить постоянную ссылку и заголовок, вы можете комбинировать функции get_permalink(); и get_the_title(); в атрибуте select "value".

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