【问题标题】:Meta Box, WordPress and New Tab/WindowMeta Box、WordPress 和新标签/窗口
【发布时间】:2013-06-28 14:51:18
【问题描述】:

我的最后一个问题有点令人困惑。所以我重新创建了这个问题以更好地澄清。这个主题的前任开发者使用 add_meta_box(); 函数为幻灯片自定义帖子类型做了很多选择。

共有三个“元框”:

  1. 是“Legenda Banner”,在滑块上显示文字。本网站未使用(所以忽略此);
  2. 另一个是“Link do Slider”,用于在图像中插入链接。此链接可以是内部链接,也可以是外部链接。
  3. 创建的这个是“Target do Banner”,用于在图像链接处插入目标。如果用户选择“nova janela”选项,页面将在新窗口(或标签)中打开。如果用户选择“mesma janela”选项,页面将在同一窗口(或选项卡)打开。

问题是:我无法让“Target do Banner”工作。我做了一个选择。但我不知道什么是最好的选择。

另外:我知道我可以在外部窗口中打开所有链接。但我的客户要求“选择”。

这是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>

【问题讨论】:

  • 你的代码有很多错误的地方。一方面,更新$_POST 数据而不检查其存在或真实性(大安全漏洞)。 Many working examplesWordPress Development。你最好使用Advanced Custom Fields,甚至保持相同的帖子元名称。
  • 嗨@brasofilo,这段代码不是我的。我只是“使用”相同的想法来尝试使页面打开为空白。但我会使用 ADC,谢谢。
  • 如果您想自己编写代码,请按照我提供的 WPSE 链接进行操作。否则,ACF 是一个很棒的工具。现在,如果项目需要高度定制的东西,我只会手工制作自定义字段和元框。

标签: php javascript wordpress wordpress-theming


【解决方案1】:

由于代码一团糟,我决定用我的风格重新编写代码。而且我还会使用Advanced Custom Field 插件。

感谢大家的回答。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 2012-03-22
    相关资源
    最近更新 更多