classificar visualmente "tipos de postagem personalizados" para usuários finais


9

Agora, com esses tipos de postagem personalizados e outros bits de conteúdo que não precisam necessariamente ser organizados cronologicamente por data, por exemplo: o cliente tem 100 camisetas como o tipo de postagem personalizada "SHIRT" e deseja definir a ordem de aparência .

Que abordagem você sugere para deixar o editor / administrador do site ORDENAR seu pedido?


Você pode dar alguns exemplos de quais tipos de coisas ele gostaria de classificá-las? Algumas respostas podem ser melhores para algumas coisas do que para outras.
MikeSchinkel

Mike: talvez camisetas onde ele gostaria que fosse o primeiro, ou geralmente qualquer postagem que o usuário não inserisse na ordem correta.
Amit

Para aqueles que ainda pesquisam esse post, existem alguns plugins WP agradáveis ​​que resolvem esse problema. Acabei de implementar este: wordpress.org/extend/plugins/post-types-order

Respostas:



3

você pode filtrar sobre taxonomias

        // to filter by category
    function restrict_manage_posts() {
        global $typenow;

        if ( FB_CPT_POST_TYPE_1 == $typenow ) {
            $args = array('orderby' => 'count', 'hide_empty' => true);
            echo $this->get_taxonomy_html_select(FB_CPT_TAXONOMY_TYPE_1, $args);
        }
    }

    function get_taxonomy_html_select($taxonomy_name, $args) {

        $taxonomy = get_taxonomy($taxonomy_name);
        $terms = get_terms($taxonomy_name, $args);
        $label = __( 'Show all ' . $taxonomy->label, FB_CPT_TEXTDOMAIN );
        $html = array();
        $html[] = '<select style="min-width:155px;" id="' . $taxonomy_name . '" name="' . $taxonomy_name . '" class="postform">';
        $html[] = '<option value="0">' . $label . '</option>';
        if ( isset($_GET[$taxonomy_name]) )
            $this_term = $_GET[$taxonomy_name];
        else
            $this_term = '';
        foreach($terms as $term) {
            $default = ( $this_term == $term->term_id ? ' selected="selected"' : '' );
            $value = esc_attr($term->name);
            $value = $value . '&nbsp;&nbsp;(' . (int)$term->count . ')';
            $html[] = "\t" . '<option value="' . $term->term_id . '"' . $default . '>' . $value . '</option>';
        }
        $html[] = '</select>' . "\n";
        return implode( "\n", $html );
    }

    function request($request) {
        global $pagenow;

        if ( is_admin() && 'edit.php' == $pagenow && isset( $request[FB_CPT_TAXONOMY_TYPE_1] ) && FB_CPT_POST_TYPE_1 == $request[FB_CPT_TAXONOMY_TYPE_1] ) {
            $request['taxonomy'] = FB_CPT_TAXONOMY_TYPE_1;
            $request['term'] = get_term($request[FB_CPT_TAXONOMY_TYPE_1], FB_CPT_TAXONOMY_TYPE_1)->name;
            unset($request['name']);
        }

        return $request;
    }

use este ganchos

            // to filter custom post type per custom taxonomy
        add_action( 'restrict_manage_posts', array( &$this, 'restrict_manage_posts') );
        add_action( 'request', array( &$this, 'request' ) );

Eu tentei implementá-lo, mas ele não funciona para mim .. existem etapas anteriores que devo seguir? declarando alguma taxonomia? obrigado!
Amit

é um exemplo na minha classe para o tipo de postagem personalizada; você deve alterar a matriz (e isso etc.) para não usar em uma classe e a constante FB_CPT_TAXONOMY_TYPE_1 é minha primeira taxonomia personalizada e assim por diante e a constante FB_CPT_POST_TYPE_1 é meu primeiro tipo de postagem personalizada
bueltge

por favor, veja esta resposta ( wordpress.stackexchange.com/questions/45/… ), é semelhante
bueltge

Eu entendo ... provavelmente não me expliquei muito bem - o que eu quis dizer é deixar o usuário definir a ordem de classificação e essa nova ordem deve ser refletida no front-end. O que realmente estou procurando é algo como o novo menu GUI, mas para posts / posts personalizados.
Amit

0

Gostaria de olhar para as telas de administração do gerador de menu. Como um menu é apenas um tipo de postagem personalizado, tenho certeza de que algumas dessas coisas podem ser usadas como inspiração.


isso não é uma má idéia, mas os menus contêm um número infinito de itens (mais de 100)? não seria um inchaço ter um item de entrada para cada postagem?
Amit

0

Para ter uma ordem de classificação verdadeiramente arbitrária (completamente não relacionada a qualquer campo de postagem), você precisará criar um campo "valor da classificação" (ou "peso") e inserir um valor numérico para cada item desse campo. Você pode classificar nesse campo.


0

Se tudo o que você quer fazer é definir uma posição para cada "Camisa", por que não usar apenas a Ordem dos Menus, você pode classificar por ordem de menu na sua WP_Query. Você provavelmente precisará criar uma meta box que defina a menu_orderpropriedade da postagem . Então no seu WP_Query:

$shirts = new WP_Query( 'post_type=shirt&orderby=menu_order&order=ASC' );

Isso funcionaria de maneira semelhante à forma como você solicita imagens na Media Uploadguia Galeria, para definir a ordem dos menus da página.

Ou estou entendendo mal alguma coisa?


você acertou, mas acho que o usuário .. ele precisa ir manualmente para cada mensagens e definir um número na caixa de meta .. não é muito amigável ..
Amit

Incorporá-lo ao Quick Edit tornaria isso muito mais fácil, mas sim, poderia ser demorado.
quer

0

O que eu prefiro fazer se estiver criando o tipo de postagem em um plug-in ou no código é também adicionar esse código, o que permite definir um pedido padrão para o front e back-end e também definir a variável GET no admin para que o administrador do WordPress reconhece a alteração e coloca a seta para cima se você estiver classificando por título, data ou qualquer outra coisa que esteja mostrando na tabela de administradores.

add_filter( 'pre_get_posts' , 'my_cpt_order' ); // Runs before the posts are fetched
function my_cpt_order( $query ) {
    // Check query and alter only the query needed
    //echo '<PRE>'; print_r($query); echo '</PRE>'; 
    if ($query->query['post_type'] == 'cpt' && !isset($query->query['orderby'])) {
        $query->set( 'orderby' , 'title' );
        $query->set( 'order' , 'asc' );
        //get the arrow to show up over title in admin
        if (is_admin()) {
            $_GET['orderby'] = 'title';
            $_GET['order'] = 'asc';
        }
    } //if
} //my_cpt_order

Como menu_order é o padrão, isso não é necessário se você estiver classificando um tipo de postagem personalizado por menu_order, mas se for um tipo de postagem em que você não deseja que o usuário tenha que se preocupar em classificar-se e deseja usar algo como title , é muito útil.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.