クイック編集モードでカスタムフィールドの値を取得します
-
16-10-2019 - |
質問
フィールドをクイック編集に追加しようとしています。どういうわけかそれが機能します:表示され、入力フィールドに値を入力すると、値はカスタムフィールドに保存されます。ただし、カスタムフィールドの値を取得する方法を見つけることができないようです。これが私がこれまでに得たものです:
add_action('quick_edit_custom_box', 'ilc_quickedit_show', 10, 2);
function ilc_quickedit_show( $col, $type ) {
if( $type != 'event' ) return; ?>
<fieldset class="inline-edit-col-left">
<div class="inline-edit-col">
<div class="inline-edit-group">
<label for="eventdate" style="font: italic 12px Georgia, serif;">Event Date</label>
<span class="input-text-wrap">
<input type="text" name="eventdate" id="eventdate" size="10" value="">
</span>
</div>
</div>
</fieldset>
<?php
}
入力された値は以下を使用して保存されます。
add_action('save_post','ilc_quickedit_save',10,3);
function ilc_quickedit_save($post_id, $post) {
if( $post->post_type != 'event' ) return;
update_post_meta($post_id, 'Event Date', $_POST['eventdate']);
}
確かに気づいたように、これはカスタム投稿タイプ「イベント」用です。ただし、値を取得してフィールドに入力することはできません。 AFAIK、これにはinline-edit-post.jsが含まれますが、inlineeditpostを使用してカスタムフィールド値を取得する方法は見つかりません。投稿IDもJavaScriptスコープで利用できます
add_action('admin_head-edit.php', 'ilc_quickedit_get');
function ilc_quickedit_get() { ?>
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery('a.editinline').live('click', function() {
var id = inlineEditPost.getId(this);
alert("Post id: " + id);
});
});
</script>
<?php
}
カスタムフィールドテンプレートプラグインをダウンロードしてコードを分析し、それらがインラインeDITPOST関数の一部を再定義していることを発見したので、同じことをすることを考えました。ただし、それらは、重複が保存されているオプションアレイを使用してそれを行っているようです。これを解決した場合、各カスタムフィールドの値を取得するために使用しているものを共有できますか?
解決
わかりました、私はそれを手に入れました、ここにコードがあります:
function ilc_quickedit_save($post_id, $post) {
if( $post->post_type != 'evento' ) return;
if (isset($_POST['is_quickedit']))
update_post_meta($post_id, 'eventdate', $_POST['eventdate']);
}
function ilc_quickedit_get() {
$html = '<script type="text/javascript">';
$html .= 'jQuery(document).ready(function() {';
$html .= 'jQuery("a.editinline").live("click", function() {';
$html .= 'var id = inlineEditPost.getId(this);';
$html .= 'jQuery.post("' . THEME_URI . '/library/admin/admin.php",{ post_id: id, modo: "ajaxget" },';
$html .= 'function(data){ jQuery("#eventdate").val(data); }';
$html .= ');});});';
$html .= '</script>';
echo $html;
}
admin.phpファイルの先頭にあるコード(このコードがすべて配置されているファイルと同じファイルです):
if($_POST['modo'] == 'ajaxget'){
require_once('../../../../../wp-blog-header.php');
$post_id = $_POST['post_id'];
echo get_post_meta($post_id, 'eventdate', true);
return;
}
これまでのところ、それを行う他の方法があるかもしれません。バルク編集モードでは、節約に対処する必要があります。そこにも手を使うことができます:)これが誰かに役立つことを願っています。
他のヒント
これは テストされていない コード。それがあなたのために働くかどうか見てください。基本的に、以下に読むように、私はグローバル化します $post
, 、CPTを確認してから、カスタムフィールドを取得します event
投稿のメタ(最後のパラメーターの「真」によって設定されているように、単一の値を返す)から。
あなたがしなければならない唯一のことは参照です $event
あなたのjqueryのように: {$event}
値をJavaScriptに出力します。 「静的」に見えますが、実際には動的です。
add_action('admin_head-edit.php', 'ilc_quickedit_get');
function ilc_quickedit_get()
{
global $post;
if ( $post->post_type != "event" )
return;
$event = get_post_meta( $post->ID, 'event', true ); // gets a *single* option from the postmeta table
$html = <<<HTML
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery('a.editinline').live('click', function() {
// do something with {$event}
});
});
</script>
HTML;
echo $html;
}
詩 HTMLコードをPHP変数に割り当てて、読みやすくなり、すばやく参照できるようにします $event
jqueryで。