- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我基本上想要一个自定义 CMS 页面,其中包含成对的图像和其中定义的图像的标签。我打算使用这些项目对来填充我的新 WordPress 主题的自定义页面上的内容。
感谢 Handling Plugins Options in WordPress 2.8 with register_setting()
,我已成功在 CMS 中创建了一个新的设置页面,并在其中填充了任意数量的文本框。 .
我现在需要为每个文本框添加字段,让用户打开媒体浏览器,然后选择上传到 WordPress 的现有图像或上传新图像以供选择。
我在网上找不到任何简单干净的例子。即使是我在 Stack Overflow 上发现的与此相关的问题似乎也没有关于此工作的清晰优雅的示例。
仅供记录;我最初计划使用我已经安装的插件( Developers Custom Fields )来执行此操作,认为使用此插件添加自定义图像字段会非常容易,因为使用它添加文本框非常简单。然而我似乎错了,没有明确的例子来指定这种字段。
如果您知道任何说明添加自定义图像字段(与同时添加其他字段无关)的示例,无论是使用 native WordPress API 代码还是与开发人员自定义字段插件集成。
最佳答案
您没有确切提及它,但您似乎正在处理可重复字段。
两个感兴趣的插件:Advanced Custom Fields和 Custom Content Type Manager .
今天,我在 WordPress communities at G+ 之一中看到了这篇文章:
Using the WordPress 3.5 Media Uploader within plugins .
此解决方案最初发布在 SO Question 中,此后已被删除。它被重写、修改和测试:
<?php
/**
* Plugin Name: (SO) Repeatable fields demo
* Plugin URI: http://stackoverflow.com/a/14452453/1287812
* Description: How to make repeatable fields in a meta box
* Author: brasofilo
* License: GPLv3
*/
add_action( 'admin_init', 'add_post_gallery_so_14445904' );
add_action( 'admin_head-post.php', 'print_scripts_so_14445904' );
add_action( 'admin_head-post-new.php', 'print_scripts_so_14445904' );
add_action( 'save_post', 'update_post_gallery_so_14445904', 10, 2 );
/**
* Add custom Meta Box to Posts post type
*/
function add_post_gallery_so_14445904()
{
add_meta_box(
'post_gallery',
'Custom Uploader',
'post_gallery_options_so_14445904',
'post',
'normal',
'core'
);
}
/**
* Print the Meta Box content
*/
function post_gallery_options_so_14445904()
{
global $post;
$gallery_data = get_post_meta( $post->ID, 'gallery_data', true );
// Use nonce for verification
wp_nonce_field( plugin_basename( __FILE__ ), 'noncename_so_14445904' );
?>
<div id="dynamic_form">
<div id="field_wrap">
<?php
if ( isset( $gallery_data['image_url'] ) )
{
for( $i = 0; $i < count( $gallery_data['image_url'] ); $i++ )
{
?>
<div class="field_row">
<div class="field_left">
<div class="form_field">
<label>Image URL</label>
<input type="text"
class="meta_image_url"
name="gallery[image_url][]"
value="<?php esc_html_e( $gallery_data['image_url'][$i] ); ?>"
/>
</div>
<div class="form_field">
<label>Description</label>
<input type="text"
class="meta_image_desc"
name="gallery[image_desc][]"
value="<?php esc_html_e( $gallery_data['image_desc'][$i] ); ?>"
/>
</div>
</div>
<div class="field_right image_wrap">
<img src="<?php esc_html_e( $gallery_data['image_url'][$i] ); ?>" height="48" width="48" />
</div>
<div class="field_right">
<input class="button" type="button" value="Choose File" onclick="add_image(this)" /><br />
<input class="button" type="button" value="Remove" onclick="remove_field(this)" />
</div>
<div class="clear" /></div>
</div>
<?php
} // endif
} // endforeach
?>
</div>
<div style="display:none" id="master-row">
<div class="field_row">
<div class="field_left">
<div class="form_field">
<label>Image URL</label>
<input class="meta_image_url" value="" type="text" name="gallery[image_url][]" />
</div>
<div class="form_field">
<label>Image Link</label>
<input class="meta_image_desc" value="" type="text" name="gallery[image_desc][]" />
</div>
</div>
<div class="field_right image_wrap">
</div>
<div class="field_right">
<input type="button" class="button" value="Choose File" onclick="add_image(this)" />
<br />
<input class="button" type="button" value="Remove" onclick="remove_field(this)" />
</div>
<div class="clear"></div>
</div>
</div>
<div id="add_field_row">
<input class="button" type="button" value="Add Field" onclick="add_field_row();" />
</div>
</div>
<?php
}
/**
* Print styles and scripts
*/
function print_scripts_so_14445904()
{
// Check for correct post_type
global $post;
if( 'post' != $post->post_type )
return;
?>
<style type="text/css">
.field_left {
float:left;
}
.field_right {
float:left;
margin-left:10px;
}
.clear {
clear:both;
}
#dynamic_form {
width:580px;
}
#dynamic_form input[type=text] {
width:300px;
}
#dynamic_form .field_row {
border:1px solid #999;
margin-bottom:10px;
padding:10px;
}
#dynamic_form label {
padding:0 6px;
}
</style>
<script type="text/javascript">
function add_image(obj) {
var parent=jQuery(obj).parent().parent('div.field_row');
var inputField = jQuery(parent).find("input.meta_image_url");
tb_show('', 'media-upload.php?TB_iframe=true');
window.send_to_editor = function(html) {
var url = jQuery(html).find('img').attr('src');
inputField.val(url);
jQuery(parent)
.find("div.image_wrap")
.html('<img src="'+url+'" height="48" width="48" />');
// inputField.closest('p').prev('.awdMetaImage').html('<img height=120 width=120 src="'+url+'"/><p>URL: '+ url + '</p>');
tb_remove();
};
return false;
}
function remove_field(obj) {
var parent=jQuery(obj).parent().parent();
//console.log(parent)
parent.remove();
}
function add_field_row() {
var row = jQuery('#master-row').html();
jQuery(row).appendTo('#field_wrap');
}
</script>
<?php
}
/**
* Save post action, process fields
*/
function update_post_gallery_so_14445904( $post_id, $post_object )
{
// Doing revision, exit earlier **can be removed**
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
// Doing revision, exit earlier
if ( 'revision' == $post_object->post_type )
return;
// Verify authenticity
if ( !wp_verify_nonce( $_POST['noncename_so_14445904'], plugin_basename( __FILE__ ) ) )
return;
// Correct post type
if ( 'post' != $_POST['post_type'] )
return;
if ( $_POST['gallery'] )
{
// Build array for saving post meta
$gallery_data = array();
for ($i = 0; $i < count( $_POST['gallery']['image_url'] ); $i++ )
{
if ( '' != $_POST['gallery']['image_url'][ $i ] )
{
$gallery_data['image_url'][] = $_POST['gallery']['image_url'][ $i ];
$gallery_data['image_desc'][] = $_POST['gallery']['image_desc'][ $i ];
}
}
if ( $gallery_data )
update_post_meta( $post_id, 'gallery_data', $gallery_data );
else
delete_post_meta( $post_id, 'gallery_data' );
}
// Nothing received, all fields are empty, delete option
else
{
delete_post_meta( $post_id, 'gallery_data' );
}
}
结果:
关于wordpress-theming - 同时添加自定义图像字段和其他字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14445904/
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想要改善这个问题吗?更新问题,以便将其作为on-topi
我正在使用自定义主题,代码如下:- 自定义样式.xml #FFFFFF 40dp @style/CustomWindowTitleBackground
我正在尝试将不同的 html(主题)应用到我的首页 (index.html),而我的所有其他页面都将具有相同的主题 (index_in.html)。我正在尝试这种方式,并想知道为什么它不起作用: 摘自
如何准确地、一步一步地安装夹层主题? 例如,Moderna free theme . 最佳答案 先决条件: 0) 版本控制 Python 2.7.6. Django 1.6.10 Mezzanine
使用 gatsby-plugin-theme-ui 构建 Gatsby 主题时,文档指出您可以通过将其添加到嵌套颜色对象中的主题对象来调整主体的背景颜色。这似乎没有效果。字体和样式等其他变量正确引入,
使用 gatsby-plugin-theme-ui 构建 Gatsby 主题时,文档指出您可以通过将其添加到嵌套颜色对象中的主题对象来调整主体的背景颜色。这似乎没有效果。字体和样式等其他变量正确引入,
我使用“@android:style/Theme.Holo”作为我的游戏主题: 但是为了能够设置 snackbar 小部件,我别无选择,只能使用“@style/Theme.AppCompat”,否则我
我使用这些说明通过 zopeskel 创建了一个新主题 http://docs.plone.org/adapt-and-extend/theming/theme_product_with_diazo.
我正在为我的工具栏使用当前的样式和主题,并使用一个支持库。我正在扩展 AppCompatActivity 而不是正常 Activity 。 false true
我用了但是 Theme.Holo 不起作用。 Android list : 截图: 最佳答案 根据documentation ,您引用的主题不存在。 在这种情况下,它被称为Theme_Holo_No
我正在尝试发布一个 github 博客页面,两个月前我可以毫无问题地将其发布到 github.io 页面,但现在抛出错误。我仍然可以在本地成功构建 jekyll 主题。 但是,当我将其推送到 gith
我最近使用 Android Asset Studio 为应用程序生成自定义操作栏主题,当我将所有内容放入我的项目时,应用程序崩溃并出现以下异常: java.lang.IllegalStateExcep
在较新版本的 Android Studio 中 在 values 目录中有 theme.xml 和 theme.xml(night) 可以指出它们之间的区别吗? 它会取代styles.xml 吗? 最
我想在 Atom 编辑器中为我的不同项目提供多个 UI 主题和语法主题,即每个打开的窗口都有一个主题,我该如何做到这一点?目前,更改首选项中的一项将会更改所有打开的窗口。 我安装了项目管理器插件,并尝
我只是为了安装magento 2.1.i迁移我的数据库感谢magento提供的工具。它工作得很好! 但是问题是,当我运行前端时,我收到此错误:无法通过指定的键加载主题:'pure' 当我想在管理中更改
我不喜欢 CustomTheme 的外观,我想保留 AppTheme。 但是当我将自定义标题栏与 AppTheme 一起使用时,它崩溃了,告诉我我无法组合多种样式。 我该怎么做? 谢谢! 最佳答案 首
我正在记录这个警告: I/AppCompatViewInflater:app:theme 现已弃用。请改为使用 android:theme。 奇怪的是,我使用了 Android Studio 的 Fi
我有一个“轻”主题的应用程序: @color/primary @color/primary_dark @color/accent 我希望我的 Toolbar 是深
我在 list 文件中声明我的 Activity ,如下所示。 我声明了全
这个问题在这里已经有了答案: You need to use a Theme.AppCompat theme (or descendant) with this activity (63 个答案)
我是一名优秀的程序员,十分优秀!