it-swarm.com.de

Benutzerdefinierte Beitragstypen: Benutzerdefinierte Spalten mit Titel-Untermenü?

Wenn Sie nicht benutzerdefinierte Beiträge anzeigen, erhalten Sie die folgenden Elemente:

submenu

Ich verwende keinen Titel - ich verwende benutzerdefinierte Spalten mit zwei verknüpften Feldern:

my species profiles

Gibt es eine schnelle und einfache Möglichkeit, das Untermenü zu meinen benutzerdefinierten Post-Spalten hinzuzufügen? Möglicherweise, indem ich das Feld "Titel" auf meiner benutzerdefinierten Post-Erstellungsseite verwende - ohne das Titel-Eingabefeld zu haben, da es für meine Benutzer nicht erforderlich ist, es anzuzeigen/zu bearbeiten.

2
dunc

Am Ende habe ich mich dafür entschieden:

function species_custom_columns($column){
        global $post;

        if (!isset($title)) {
            $title = $this->getValue('genus',$post->ID,TRUE) . ' ' . $this->getValue('species',$post->ID,TRUE);
        }
        if (!isset($post_url)) { $post_url = get_site_url() . "/wp-admin/post.php?post=" . $post->ID . "&action=edit"; }
        if (!isset($post_url_frontend)) { $post_url_frontend = get_site_url() . "/?p=" . $post->ID; }

        $genus_species = <<<EOT
<strong>
<a class="row-title" title="Edit “{$title}”" href="{$post_url}">{$title}</a>
</strong>
<div class="row-actions">
<span class="edit">
<a title="Edit species" href="{$post_url}">Edit</a>
|
</span>
EOT;
        $genus_species .= $this->delete_post_link('Trash', $title, '<span class="trash">', ' |</span>');

        $genus_species .= <<<EOT
<span class="view">
<a rel="permalink" title="View “{$title}”" href="{$post_url_frontend}">View</a>
</span>
</div>
EOT;

        switch ($column) {
            case "genus_species":
                echo $genus_species;
                break;
            case "common_names":
                echo $this->getValue('common_names',$post->ID,TRUE);
                break;
            case "family":
                echo $this->getValue('family',$post->ID,TRUE);
                break;
            case "group":
                if (get_the_terms($post->ID, 'group')) {
                    $taxonomy_ar = get_the_terms($post->ID, 'group');

                    $output = '<ul>';
                    foreach ($taxonomy_ar as $taxonomy_term) {
                        if ($taxonomy_term->parent) {
                            $output .= '<li> <span style="font-size:6px;">&gt;</span> '. $taxonomy_term->name .'</li>';
                        } else {
                            $output .= '<li>'. $taxonomy_term->name .'</li>';
                        }
                    }
                    $output .= '</ul>';

                    echo $output;
                }
                break;
            case "excerpt":
                //echo the_excerpt();
                break;
            case "date_modified":
                echo the_modified_date('F j, Y @ g:i a');
                break;
        }
    }

Scheint den Trick zu machen!

1
dunc

Ich hatte eine ähnliche Situation und habe mich auf </wp-admin/includes/class-wp-posts-list-table.php> gestützt: 499 (function single_row {...case 'title')

Kopieren Sie den $actions-Erstellungsblock und die zugehörigen Variablen (die ungefähr so ​​aussehen) in Ihre manage_{post_type}_posts_custom_column-Aktion:

$post = get_post( $post_id );
setup_postdata( $post );

$title = _draft_or_post_title();
$post_type_object = get_post_type_object( $post->post_type );
$can_edit_post = current_user_can( $post_type_object->cap->edit_post, $post->ID );

$actions = array();
if ( $can_edit_post && 'trash' != $post->post_status ) {
    $actions['edit'] = '<a href="' . get_edit_post_link( $post->ID, true ) . '" title="' . esc_attr( __( 'Edit this item' ) ) . '">' . __( 'Edit' ) . '</a>';
    $actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="' . esc_attr( __( 'Edit this item inline' ) ) . '">' . __( 'Quick&nbsp;Edit' ) . '</a>';
}
if ( current_user_can( $post_type_object->cap->delete_post, $post->ID ) ) {
    if ( 'trash' == $post->post_status )
        $actions['untrash'] = "<a title='" . esc_attr( __( 'Restore this item from the Trash' ) ) . "' href='" . wp_nonce_url( admin_url( sprintf( $post_type_object->_edit_link . '&amp;action=untrash', $post->ID ) ), 'untrash-' . $post->post_type . '_' . $post->ID ) . "'>" . __( 'Restore' ) . "</a>";
    elseif ( EMPTY_TRASH_DAYS )
        $actions['trash'] = "<a class='submitdelete' title='" . esc_attr( __( 'Move this item to the Trash' ) ) . "' href='" . get_delete_post_link( $post->ID ) . "'>" . __( 'Trash' ) . "</a>";
    if ( 'trash' == $post->post_status || !EMPTY_TRASH_DAYS )
        $actions['delete'] = "<a class='submitdelete' title='" . esc_attr( __( 'Delete this item permanently' ) ) . "' href='" . get_delete_post_link( $post->ID, '', true ) . "'>" . __( 'Delete Permanently' ) . "</a>";
}
if ( $post_type_object->public ) {
    if ( in_array( $post->post_status, array( 'pending', 'draft', 'future' ) ) ) {
        if ( $can_edit_post )
            $actions['view'] = '<a href="' . esc_url( add_query_arg( 'preview', 'true', get_permalink( $post->ID ) ) ) . '" title="' . esc_attr( sprintf( __( 'Preview &#8220;%s&#8221;' ), $title ) ) . '" rel="permalink">' . __( 'Preview' ) . '</a>';
    } elseif ( 'trash' != $post->post_status ) {
        $actions['view'] = '<a href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( sprintf( __( 'View &#8220;%s&#8221;' ), $title ) ) . '" rel="permalink">' . __( 'View' ) . '</a>';
    }
}

Ändern Sie diese Zeile:

$this->row_actions( $actions );          // From this

// This is calling a non static function statically and will throw an error.
// WP_List_Table::row_actions( $actions );

// Correct way, no error.
$WPTables = new WP_List_Table;
$WPTables->row_actions( $actions );

Nicht der zukunftssicherste Code, aber bis er in eine wiederverwendbare Funktion eingebunden ist, ist er eine gute funktionierende Lösung.

Prost,

2
Chauncey

Joost DeValk ging hier durch die verschiedenen Optionen/Einstellungen in diesem Beitrag: http://yoast.com/custom-post-type-snippets/

1
Norcross