2013-06-28 1 views
0

마지막 질문은 약간 혼란 스러웠습니다. 그래서 나는 더 명확하게하기 위해 질문을 다시 만들었다. 이 테마의 이전 개발자는 슬라이드 사용자 정의 게시 유형에 대해 add_meta_box(); 함수를 사용하여 많은 옵션을 만들었습니다.메타 박스, 워드 프레스 및 새 탭/창

  1. 는 "젠다 배너"가, 슬라이더에서 텍스트를 표시하기 :

    세 가지 "메타 상자"가 있습니다. 이 웹 사이트에서는 사용되지 않습니다 (이 태그는 무시하십시오).

  2. 다른 하나는 이미지에 링크를 삽입하는 "링크 할 슬라이더"입니다. 이 링크는 내부 또는 외부 일 수 있습니다.
  3. 이미지의 링크에 대상을 삽입하기 위해 만든 "대상 않습니다 배너"입니다. 사용자가 "nova janela"옵션을 선택하면 페이지가 새 창 (또는 탭)에서 열립니다. 사용자가 "mesma janela"옵션을 선택하면 같은 창 (또는 탭)에서 페이지가 열립니다.

문제는 다음과 같습니다. "대상에 배너 작업"을 할 수 없습니다. 나는 SELECT를했다. 그러나 나는 무엇이 최선의 선택인지 모른다.

기타 : 외부 창에서 모든 링크를 열 수 있음을 알고 있습니다. 그러나 내 의뢰인은 "선택"을 요구하고 있습니다.

이것은 slider.php의 코드입니다. 아래는 index.php (슬라이더가 생성되는 곳)의 코드입니다. 이미지는 미리보기 이미지입니다.

<?php 

add_action('init', 'slider_register'); 

// adiciona ao admin_init a função slider_register. (Toda vez que iniciar o ADMIn iniciara esta função) 
// register_post_type(); responsavel para registrar o POST TYPE. 

function slider_register() { 

$labels = array(
    'name' => _x('Sliders', 'post type general name'), 
    'singular_name' => _x('Slider', 'post type singular name'), 
    'add_new' => _x('Adicionar Novo', 'galeria item'), 
    'add_new_item' => __('Adicionar novo slider'), 
    'edit_item' => __('Editar slider'), 
    'new_item' => __('Novo slider'), 
    'view_item' => __('Ver slider'), 
    'search_items' => __('Procurar slider'), 
    'not_found' => __('Nada encontrado'), 
    'not_found_in_trash' => __('Nada na lixeira'), 
    'parent_item_colon' => '' 
); 

$args = array(
    'labels' => $labels, 
    'public' => true, 
    'publicly_queryable' => true, 
    'show_ui' => true, 
    'query_var' => true, 
    'menu_icon' => get_stylesheet_directory_uri() . '/slider.png', 
    'rewrite' => true, 
    'capability_type' => 'post', 
    'hierarchical' => false, 
    'menu_position' => null, 
    'supports' => array('title','editor','thumbnail') 
); 

register_post_type('slider' , $args); 

} 


add_action("admin_init", "admin_init"); 

function admin_init(){ 
    add_meta_box("legenda_banner", "Legenda do slider", "legenda_banner", "slider", "side", "low"); 
    add_meta_box("link_banner", "Link do slider", "link_banner", "slider", "side", "low"); 
    add_meta_box("target_banner", "Target dp Banner", "target_banner", "slider", "side", "low"); 
} 

function legenda_banner(){ 
    global $post; 
    $custom = get_post_custom($post->ID); 
    $legenda_banner = $custom["legenda_banner"][0]; 
    ?> 
    <label>Legenda do banner:</label> 
    <input name="legenda_banner" type="text" value="<?php echo $legenda_banner; ?>" /> 
    <?php 
} 

function link_banner(){ 
    global $post; 
    $custom = get_post_custom($post->ID); 
    $link_banner = $custom["link_banner"][0]; 
    ?> 
    <label>Link do banner:</label><br/> 
    <input name="link_banner" type="text" value="<?php echo $link_banner; ?>" /> 

    <?php 
} 

function target_banner(){ 
    global $post; 
    $custom = get_post_custom($post->ID); 
    $link_banner = $custom["link_banner"][0]; 
    ?> 
    <label>Target do banner:</label><br/> 
<select name="target_banner"> 
    <option value="_blank">Nova Janela</option> 
    <option value="_self">Mesma Janela</option> 
</select> 

    <?php 
} 

add_action('save_post', 'save_details'); 

function save_details(){ 
    global $post; 
    update_post_meta($post->ID, "legenda_banner", $_POST["legenda_banner"]); 
    update_post_meta($post->ID, "link_banner", $_POST["link_banner"]); 
    update_post_meta($post->ID, "target_banner", $_POST["target_banner"]); 

} 

이제 index.php의 코드 (슬라이더의 코드 만 복사 함).

       <section class="banner-main"> 
       <a href="#" class="prev">Anterior</a><?php 
         $recentPosts = new WP_Query(); 
         $args = array(

          'post_type' => 'slider' 
         ); 
         $recentPosts->query($args); 
        ?> 

       <ul> 


        <?php 

          while ($recentPosts->have_posts()) : $recentPosts->the_post(); 

        ?> 
        <li><a href="<?php echo get_post_meta($post->ID, 'link_banner', true); ?>" target="<?php echo get_post_meta($post->ID, 'target_banner', true); ?>"><?php the_post_thumbnail(); ?></a></li> 

        <?php endwhile;?> 

       </ul> 
       <a href="#" class="next">Próximo</a> 
      </section> 
+0

코드에 많은 잘못이 있습니다. 하나는'$ _POST' 데이터의 존재 또는 진위 여부 (큰 보안 구멍)를 확인하지 않고 업데이트하는 것입니다. [많은 작업 예제] (http://wordpress.stackexchange.com/search?tab=votes&q=%2bsave_post%20%2bupdate_post_meta%20is%3aanswer) [wordpress.se]. [고급 사용자 정의 필드] (http://wordpress.org/plugins/advanced-custom-fields/)를 사용하는 것이 나을 것이고 동일한 메타 이름을 유지할 수도 있습니다. – brasofilo

+0

안녕하세요 @ brasofilo이 코드는 내 것이 아닙니다. 페이지를 비워두기 위해 동일한 아이디어를 "사용"했습니다. 하지만 ADC를 사용하겠습니다. 감사합니다. – starkbr

+0

직접 코드를 작성하려면 제공된 WPSE 링크를 따르십시오. 그렇지 않으면 ACF는 훌륭한 도구입니다. 요즘에는 고도로 맞춤화 된 프로젝트가 필요하면 맞춤 필드와 메타 박스 만 손으로 ​​만 수행합니다. – brasofilo

답변

0

코드가 엉망이므로 내 스타일을 사용하여 코드를 다시 작성하기로 결정했습니다. 또한 Advanced Custom Field 플러그인을 사용하겠습니다.

모든 답변 주셔서 감사합니다.