0
我最后一个问题有点混乱。所以我重新创建了这个问题来更好地阐明。此主题的以前开发者为幻灯片自定义帖子类型提供了很多功能add_meta_box();
。Meta Box,WordPress和新标签页/窗口
有三个“元盒子”:
- 就是“通古斯旗帜”,以显示在滑块文本。它不在这个网站上使用(所以忽略这个);
- 另一个是“链接滑块”,在图像上插入链接。此链接可以是内部链接或外部链接。
- 创建的这一个是“Target do Banner”,在图像的链接处插入一个目标。如果用户选择“nova janela”选项,页面将在新窗口(或标签)中打开。如果用户选择“mesma janela”选项,页面将在同一个窗口(或选项卡)中打开。
问题是:我无法让“Target do Banner”工作。我做了一个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>
你的代码有很多错误的东西。例如,更新'$ _POST'数据而不检查它的存在或真实性(很大的安全漏洞)。 [wordpress.se]中的[许多工作示例](http://wordpress.stackexchange.com/search?tab=votes&q=%2bsave_post%20%2bupdate_post_meta%20is%3aanswer)。您最好使用[高级自定义字段](http://wordpress.org/plugins/advanced-custom-fields/),甚至保留相同的帖子元名称。 – brasofilo
Hi @brasofilo此代码不是我的。我只是“使用”了相同的想法,试图使页面空白。但我会用ADC,谢谢。 – starkbr
如果您想自己编写代码,请按照我提供的WPSE链接进行操作。否则,ACF是一个很好的工具。现在,如果项目需要高度定制的东西,我只手工制作自定义字段和元框。 – brasofilo