2

我创建了一个画廊帖子类型(作为插件的一部分),除了标题和一些元信息之外,还包含wp_list_table查询那些具有当前帖子的附件的元信息post_parent。当我的发布按钮突然停止工作时,我遇到了问题。无论我是在创建新画廊还是在编辑旧画廊,一旦我点击更新/发布,我的更改就会丢失,最终会出现在edit.php.
有人知道那是怎么回事吗?

我能够找出问题似乎出在哪里。它在我的 list_table 类中,它继承自wp_list_table. 在注释掉一些不重要的功能后,我得到了一个不同的错误,但仍然没有新的或更新的画廊。现在我得到了are you sure you want to do this页面。

即使是最基础的课程也不会工作......

if( ! class_exists( 'WP_List_Table' ) ) {
    require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
}

class Yard_Attachment_Table extends WP_List_Table {
function __construct() {
    global $status, $page;      
    parent::__construct( array(
        'singular'  => 'yard Attachment',
        'plural'    => 'yard Attachments',
        'ajax'      => false
    ) );

}

function column_default($item, $column_name) {
    return 'default';
}
function get_columns(){
    $columns = array(
        'checkbox'  => '<input type="checkbox" />', //for simplicity its not 'cb'
        'thumb'     => 'Thumbnail',
        'title'     => 'Titel',
        'pos'       => 'Position'
    );
    return $columns;
}
function prepare_items() {
    global $wpdb;
    $columns = $this->get_columns();
    $hidden = array();
    $sortable = $this->get_sortable_columns();

    $this->_column_headers = array($columns, $hidden, $sortable);

    if (isset($_REQUEST['post'])) {
        $query = "  SELECT * 
                    FROM $wpdb->posts 
                    WHERE post_type = 'attachment' 
                    AND post_parent = {$_REQUEST['post']}";
        $data = $wpdb->get_results($query, ARRAY_A);
    } else {
        $data = array();
    }

    $this->items = $data;

}
}

在插件类的构造函数中,我使用
add_action('add_meta_boxes_yard_gallery', array($this, 'yard_metaboxes'));.
yard_metaboxes我使用add_meta_box的函数中,我有一个回调函数,我正在创建new我的表类的一个实例,然后我调用prepare_items()display()



在我的页面上打开 error_reporting 会因以下消息而死:

Strict Standards: Only variables should be passed by reference in /Applications/MAMP/htdocs/Web/ChristophRokitta/wp v.1.0/wp-includes/pomo/mo.php on line 210

Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/Web/ChristophRokitta/wp v.1.0/wp-includes/pomo/mo.php:210) in /Applications/MAMP/htdocs/Web/ChristophRokitta/wp v.1.0/wp-includes/pluggable.php on line 876

顺便说一句,我没有本地化。
请帮忙!如果我有更多的声誉,我会提供它。

添加元框代码

在我的插件文件中:

require_once( plugin_dir_path( __FILE__ ) . 'class-yard.php' );
Yard::get_instance();

在我的类场文件中,元框方法位于底部:

class Yard {
    protected static $instance = null;
    private function __construct() {
        include_once('class-yard-attachments.php');

        add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_styles' ) );

        add_action('after_setup_theme', array($this, 'yard_thumbnails'));

        add_action('init', array($this, 'yard_post_type'));
        add_action('init', array($this, 'yard_taxonomies'));
        add_filter('manage_yard_gallery_posts_columns', array($this, 'yard_add_columns'));
        add_action('manage_posts_custom_column', array($this, 'yard_fill_columns'));
        add_action('add_meta_boxes_yard_gallery', array($this, 'yard_metaboxes'));
    }

    public static function get_instance() {// If the single instance hasn't been set, set it now.
        if (null == self::$instance ) {
            self::$instance = new self;
        }
        return self::$instance;
    }

    public function enqueue_admin_styles() {
        $screen = get_current_screen();
        if ($screen->post_type == 'yard_gallery') {
            wp_register_style( 'yard-gallery-style', plugins_url('css/yard-gallery-style.css', __FILE__) );
            wp_enqueue_style( 'yard-gallery-style' );
        }
    }

    public function yard_thumbnails() {
        //add_image_size('yard-thumbnail', 100, 100, true);
    }

    public function yard_post_type() {
        $gallery_labels = array(
            'name' => 'Galerien',
            'singular_name' => 'Galerie',
            'all_items' => 'Alle Galerien',
            'add_new' => 'Erstellen',
            'add_new_item' => 'Neue Galerie erstellen',
            'edit_item' => 'Galerie bearbeiten',
            'new_item' => 'Neue Galerie',
            'view' => 'Galerie anzeigen',
            'view_item' => 'Gallerie anzeigen',
            'search_items' => 'Galerie durchsuchen',
            'not_found' => 'Keine Galerien gefunden',
            'not_found_in_trash' => 'Es befinden sich keine Galerien im Papierkorb',
            'parent_item_colon' => ''
        );
        $gallery_args = array(
            'labels' => $gallery_labels,
            'public' => true,
            // 'publicly_queryable' => true,
            // 'show_ui' => true,
            // 'show_in_menu' => true,
            // 'query_var' => true,
            'rewrite' => true,
            // 'capability_type' => 'post',
            // 'hierarchical' => false,
            'menu_position' => 12,
            'supports' => array(
                'title'
            )
            // 'menu_icon' => plugin_dir_url(__FILE__) . '/assets/icon_16_grey.png'//16x16 png if you want an icon
        );
        register_post_type('yard_gallery', $gallery_args);
    }

    public function yard_taxonomies() {
        register_taxonomy(
            'yard_work_type',
            'yard_gallery',
            array(
                'hierarchical' => true,
                'label' => 'Art der Arbeit'
            )
        );
        register_taxonomy(
            'yard_subject',
            'yard_gallery',
            array(
                'hierarchical' => true,
                'label' => 'Motiv'
            )
        );
    }

    public function yard_add_columns( $columns ){
        $columns = array(
            'cb' => '<input type="checkbox">',
            'yard_post_thumb' => 'Thumbnail',
            'title' => 'Bezeichnung',
            'yard_pos' => 'Position',
            'date' => 'Datum'
        );
        return $columns;
    }
    public function yard_fill_columns( $column ) {
        global $post;
        switch ($column) {
            case 'yard_post_thumb' :
                echo the_post_thumbnail('admin-list-thumb');
                break;
        }
    }

    public function yard_metaboxes( $post ) {
        global $wp_meta_boxes;

        add_meta_box(
            'yard-attachments',
            'Bilder',
            array($this, 'get_yard_attachment_table'),
            'yard_gallery'
        );
    }
    public function get_yard_attachment_table() {
        $yard_list_table = new Yard_Attachment_Table();
        $yard_list_table->prepare_items();

        $yard_list_table->display();
    }
}
4

1 回答 1

0

严格的标准:只有变量应该在 /Applications/MAMP/htdocs/Web/ChristophRokitta/wp v.1.0/wp-includes/pomo/mo.php 的第 210 行通过引用传递

错误消息说明了一切。“.../popo/mo.php”文件与Wordpress 翻译有关(相关) 。(我打赌你正在使用带有德语文件的 Wordpress)。

我看不出您在此处发布的代码可能有什么问题,但有些东西干扰了翻译。查看错误消息告诉我们的内容,Wordpress 尝试翻译的某些变量无法翻译,因为它不是正确的类型。

警告:无法修改标头信息 - 标头已由 /Applications/MAMP/htdocs/Web/ChristophRokitta/wp v.1.0/wp-includes/pomo/mo.php:210 中的 /Applications/MAMP/htdocs 发送/Web/ChristophRokitta/wp v.1.0/wp-includes/pluggable.php 在第 876 行

这是上一个错误消息和 Wordpress 尝试发送到浏览器的标题的逻辑结果。

发生了什么:第一条错误消息被推送到客户端并刷新到浏览器屏幕。接下来,Wordpress 尝试发送它通常的标头并在这样做时产生错误,因为必须在将任何内容发送到客户端之前发送标头。

换句话说:当您将某些内容回显到屏幕然后尝试发送“header(...)”信息时,总是会出现“无法修改标题信息”错误。在这种情况下,翻译问题会产生第一条错误消息,然后 Wordpress 尝试发送标头,但失败并产生第二条错误消息。

提示

  • 检查您正在做的与翻译相关的所有事情(阅读:无论您传递“德语”和/或“英语”语言字符串的位置)

更重要的是

  • 确保您实际上传递了正确的类型......查看错误和您的代码,很可能是您在某处传递了一个类、一个类引用或另一个对象,而不是预期的变量。
于 2013-07-05T08:02:30.277 回答