发布元问题:为所有文章复制相同的元

时间:2011-05-30 作者:Paul_p


我创建了一个post meta,将特定“作者”的名字添加到我的文章中。但是如果我输入第一篇文章的meta,所有其他文章都会复制相同的meta。如果我在第二篇文章的meta中输入第二个名称,那么所有其他文章都会复制第二个“meta”,就好像我为每篇文章输入了第二个名称一样。

如何仅为一篇文章指定meta?在管理面板中:如果我没有指定作者,我仍然有“空meta”,这是我在函数中指定的文本。php。但是,在互联网上的页面上,它显示了文章中最后一个“元”名称的名称。我希望我的描述足够清楚,请告诉我更多信息。

以下是代码的主要行:

$met = get_post_meta($post->ID, \'champ\', true)? get_post_meta($post->ID, \'champ\', true) : \'empty meta\';

echo \'<input type="text" id="champ" name="champ" value="\'.$met.\'" />\';
…
add_post_meta($post_id, "champ", $_POST[\'champ\'], true);
update_post_meta($post_id, "champ", $_POST[\'champ\']);

2 个回复
SO网友:Stephen Harris

在添加/更新元数据之前,无需检查元数据是否存在。update_post_meta 这是为你做的。(参见Codex)

update_post_meta($post_id, $meta_key, $meta_value, $prev_value);
第四个(可选)$prev_value 参数(如果设置)将仅更新$meta_key-$prev_value 配对。如果未设置,它将更新该值的所有值$meta_key 为了那个职位。如果找不到的话$meta_key, 它将创建一个新记录。

这个add_post_meta, 默认情况下,将添加记录,无论该键是否已存在。看来这就是正在发生的事情,所以试试看var_dump-ing公司get_post_meta($post->ID, $key, FALSE) 并检查返回的内容。

EDIT

我没有选中此选项,但由于您的帖子元没有下划线,它可能会在编辑帖子页面上出现两次(一次在自定义元框中,一次在自定义字段部分(这可能是隐藏的,请检查屏幕选项)。这可能会导致新的元值和旧值都保存到数据库中。。。

SO网友:Paul_p

这是我的插件代码,用于添加帖子元。问题是:

经过一些测试,我发现只有“老”帖子“复制”了帖子元,而不是最新的帖子。所以说这不是我的主要问题。(如果你对此有解释,我就接受;)

现在的主要问题是:如果我更新一个meta,它不会更新它,而是为相同的post\\u id、相同的meta\\u键以及相同的meta\\u值创建一个新的meta。

我在这里使用教程(以上)中的“保存”功能。

        add_action( \'add_meta_boxes\', \'myplugin_add_custom_box\' );
        add_action( \'save_post\', \'myplugin_save_postdata\' );

        /* Adds a box to the main column on the Post and Page edit screens */
        function myplugin_add_custom_box() {
            add_meta_box(
                \'test1\',
                __( \'Author : \', \'myplugin_textdomain\' ),
                \'myplugin_inner_custom_box\',
                \'post\'
            );
            add_meta_box(
                \'test2\',
                __( \'My test2\', \'myplugin_textdomain\' ),
                \'myplugin_inner_custom_box\',
                \'movies\'
            );
        }


        /* Prints the box content */
        function myplugin_inner_custom_box() {
            global $post;
            echo \'<input type="hidden" name="eventmeta_noncename" id="eventmeta_noncename" value="\' .
            wp_create_nonce( plugin_basename(__FILE__) ) . \'" />\';

            $met = get_post_meta($post->ID, \'champ\', true)? get_post_meta($post->ID, \'champ\', true) : \'empty meta\';

            /* input */
            echo \'<label for="myplugin_new_field">\';
            _e("Author name : ", \'myplugin_textdomain\' );
            echo \'</label> \';
            echo \'<input type="text" id="champ" name="champ" value="\'.$met.\'" />\';
            /* select list */
            echo \'<label for="my_list_field">\';
            _e("Already in database : ", \'myplugin_textdomain\' );
            echo \'</label> \';
            echo \'<select name="my_list_field" id="my_list_field">\';
            global $post;

            $s_query = new WP_Query( array(
            \'suppress_filters\' => false,
            \'post_type\' => \'movies\'));
            while($s_query->have_posts()):$s_query->the_post();

                $sname = $post->post_title;
                $s_output2 =\'\';
                $s_output2 .= \'<option value="\'.$post->ID.\'" >\';
                $s_output2 .= $post->post_title.\' : allo\';
                $s_output2 .= \'</option>\';
                echo $s_output2;

            endwhile ;
            echo \'</select>\';
            wp_reset_query();
        }


        // Save the Metabox Data
        function wpt_save_events_meta($post_id, $post) {

            if ( !wp_verify_nonce( $_POST[\'eventmeta_noncename\'], plugin_basename(__FILE__) )) {
            return $post->ID;
            }
            if ( !current_user_can( \'edit_post\', $post->ID ))
                return $post->ID;
            $events_meta[\'champ\'] = $_POST[\'champ\'];
            foreach ($events_meta as $key => $value) { // Cycle through the $events_meta array!
                $value = implode(\',\', (array)$value); // If $value is an array, make it a CSV (unlikely)
                if(get_post_meta($post->ID, $key, FALSE)) { // If the custom field already has a value
                    update_post_meta($post->ID, $key, $value);
                } else { // If the custom field doesn\'t have a value
                    add_post_meta($post->ID, $key, $value);
                }
                if(!$value) delete_post_meta($post->ID, $key); // Delete if blank
            }
        }

        add_action(\'save_post\', \'wpt_save_events_meta\', 1, 2); // save the custom fields

结束

相关推荐

将媒体上传器放在Metabox中

我发现没有必要用“添加图像”按钮将我带到另一个屏幕,让我可以将内容上传到帖子中。理想情况下,我希望有一个元框,可以选择直接在元框中添加图像。我通过复制媒体上传表单的源代码并将其粘贴到元框中,获得了一些功能。我选择的图像已上载,但我没有显示任何进度条,我需要找到一种方法,在下面列出附加的图像,以便更好地概述。有人做到了吗?代码:function add_image_test() { ?> <script type=\"text/javascript\"> //&l