我正在尝试在Wordpress中创建一个自定义元框,用于存储文章的其他链接。因为我不知道最后会有多少链接,所以我创建了一个按钮,用于向元框添加字段。
使用javascript呈现新字段,使用php存储新字段。这不像它可能的干,但我没有找到另一种方式,它应该工作。
代码运行时不会抛出错误但数组未正确保存。 print_r($current_svl_additional_links);
此刻只打印“数组”。有些东西也让我烦恼:即使帖子还没有保存,data-count="<?php echo count($current_svl_additional_links); ?>"
也是“1”。非常感谢帮助!这是我得到了多远:
/**
* Add meta box to
* svl_editions post type for additional links
* @param post $post The post object
* @link https://codex.wordpress.org/Plugin_API/Action_Reference/add_meta_boxes
*/
function svl_add_meta_box_additional_links($post) {
add_meta_box(
'svl_meta_box_additional_links',
__('Additional Links', 'stilvorlagen-functions'),
'svl_render_meta_box_additional_links',
'svl_referents',
'side',
'low'
);
}
add_action('add_meta_boxes_svl_referents', 'svl_add_meta_box_additional_links');
/**
* Render part of custom field meta box for
* svl_editions post type for additional links
* look in scripts/svl-admin-additional-links.php for the rest
* @param post $post The post object
*/
function svl_render_meta_box_additional_links($post) {
wp_nonce_field(plugin_basename(__FILE__), 'svl_meta_box_additional_links_nonce');
$current_svl_additional_links = get_post_meta($post->ID, '_svl_additional_links', true);
print_r($current_svl_additional_links);
?>
<div class="EntriesContainer" data-count="<?php echo count($current_svl_additional_links); ?>" id="itemsList">
<?php
$i = 0;
if (count($current_svl_additional_links) > 0) {
foreach((array)$current_svl_additional_links as $current_svl_additional_link) {
if (isset($current_svl_additional_link['link_name']) || isset($current_svl_additional_link['link_url'])) {
?>
<div class="svl-additional-link-item">
<p><strong><?php echo $i; ?>. Link </strong><span class="remove"> (Entfernen)</span></p>
<label for="svl_additional_links[<?php echo $i ?>][link_name]"><?php _e('Link-Name', 'stilvorlagen-functions') ?></label>
<input type="text" id="svl_additional_links[<?php echo $i ?>][link_name]" name="svl_additional_links[<?php echo $i ?>][link_name]" value="<?php echo esc_attr($current_svl_additional_link['link_name']) ?>" size="15" />
<label for="svl_additional_links[<?php echo $i ?>][link_url]"><?php _e('Link-URL', 'stilvorlagen-functions') ?></label>
<input type="text" id="svl_additional_links[<?php echo $i ?>][link_url]" name="svl_additional_links[<?php echo $i ?>][link_url]" value="<?php echo esc_attr($current_svl_additional_link['link_url']) ?>" size="15" />
<br/>
</div>
<?php
++$i;
}
}
} ?>
</div>
<div class=add-additional-link-action>
<button type="button" class="button" id="addNewItem">Add New Link</button>
</div><?php
}
/**
* Store custom field meta box data
* @param int $post_id The post ID.
* @link https://codex.wordpress.org/Plugin_API/Action_Reference/save_post
*/
function svl_save_meta_box_additional_links($post_id) {
// verify taxonomies meta box nonce
if (!is_valid_user_input(array('svl_meta_box_additional_links_nonce'), $post_id)) {
return;
}
// Make sure that everything is set.
if (! isset($_POST['svl_additional_links'])) {
SVLMessagePipeline::push_error('Input fields missing.');
delete_post_meta($post_id, 'svl_additional_links');
return;
}
// store custom fields values
$additional_links = sanitize_text_field($_POST['svl_additional_links']);
update_post_meta($post_id, '_svl_additional_links', $additional_links);
}
add_action('save_post_svl_referents', 'svl_save_meta_box_additional_links');
和一些javascript,如果按下按钮,则呈现新字段
/**
* Render part of the custom field meta box for
* svl_editions post type for additional links
* look in svl-post-meta.php for the rest
* @param post $post The post object
*/
(function($) {
// Namespace-object to keep global scope clean:
var add_additional_link = (function () {
"use strict";
var pub = {}, // Stands for public, gets returned
timer, addNewItemButton, totalItems
pub.init = function () {
addNewItemButton = $("#addNewItem");
$(addNewItemButton).on('click', pub.addNewItem);
totalItems = parseInt($('#itemsList').attr('data-count'));
};
$(".remove").live('click', function() {
$(this).parent().parent().remove();
});
$(document).ready( function () {
pub.init();
});
pub.addNewItem = function(e) {
e.preventDefault();
++totalItems;
var $newItem =
'<div class="svl-additional-link-item">' +
'<p><strong>' + totalItems + '. Link</strong><span class="remove"> (Entfernen)</span></p>' +
'<label for="svl_additional_links[' + totalItems + '][link_name]">Link-Name</label>' +
'<input type="text" id="svl_additional_links[' + totalItems + '][link_name]" name="svl_additional_links[' + totalItems + '][link_name]" value="" size="15" />' +
'<label for="svl_additional_links[' + totalItems + '][link_url]">Link-URL</label>' +
'<input type="text" id="svl_additional_links[' + totalItems + '][link_url]" name="svl_additional_links[' + totalItems + '][link_url]" value="" size="15" />' +
'<br/>'
'</div>';
$('#itemsList').append($newItem);
};
return pub;
}());
}(jQuery))