在快速编辑模式下检索自定义字段的值

时间:2011-02-08 作者:Elio

我一直在尝试添加一个字段进行快速编辑。它以某种方式工作:它会显示出来,如果在输入字段中输入一个值,该值就会保存到自定义字段中。但是,似乎找不到检索自定义字段值的方法。以下是我目前得到的信息:

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\']);
}
正如您肯定注意到的,这是针对自定义帖子类型“event”的。但是,我无法检索值并填充字段。好了,这涉及到内联编辑帖子。但是我找不到任何方法使用inlineEditPost来检索自定义字段值。甚至post 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
}
下载了自定义字段模板插件来剖析代码,发现它们正在重新定义inlineEditPost函数的部分,所以我考虑做同样的事情。然而,它们似乎是通过存储副本的选项数组来实现的。如果您已经解决了这个问题,是否可以共享用于检索每个自定义字段的值的内容?

2 个回复
最合适的回答,由SO网友:Elio 整理而成

好的,我知道了,下面是代码:

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;
}
到目前为止还不错,也许还有其他的方法。在批量编辑模式下仍需要处理保存。也可以帮忙:)希望这对某人有用。

SO网友:Zack

这是untested 密码看看它是否适合你。基本上,正如您将在下面看到的,我将全球化$post, 检查您的CPT,然后检索自定义字段event 来自post的meta(返回单个值——由最后一个参数中的“true”设置)。

你唯一要做的就是引用$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;
}
P.S. 我将您的HTML代码分配给一个PHP变量,使其更易于阅读,并允许您快速引用$event 在jQuery中。

结束

相关推荐