2010-10-21 38 views
11

En Wordpress obtienes los estados de publicación predeterminados: Publicación, Borrador y Revisión pendiente. ¿Es posible agregar algunos tipos de publicaciones más mediante su registro a través del archivo function.php del tema activo?Wordpress crea un nuevo estado de publicación?

¿También es posible editar las etiquetas de Publish Meta Box? Lo que estoy enviando realmente no es Publishing ...

También me gusta agregar Solo quiero que se realicen estos cambios cuando estoy en el tipo de publicación personalizada que hice.

Saludos cordiales

de Scott

+0

Estos estados tienen profundas implicaciones sobre cómo se tratan y se muestran las publicaciones, ¿no? No creo que puedas agregar uno nuevo a alguna lista. ¿Qué nuevos estados quieres agregar? –

+0

Solo deseo agregar nuevos estados a mis tipos de publicaciones personalizadas y a aquellas publicaciones que ya administran la publicación a través de consultas personalizadas. Con WordPress puede consultar para mostrar las publicaciones dependiendo de qué estado sea. ¿Entonces agregar algunos estados como Vendido y Eliminado no debería ser un gran problema para el sistema? – Brady

+1

@ Brady Ya veo. No sé si esto es fácilmente posible. ¿Qué pasa con el uso del sistema de etiquetado/categorías para esto en su lugar? –

Respuesta

18

Desde WP 3.0, puede usar la función register_post_status() (http://hitchhackerguide.com/2011/02/12/register_post_status/) para agregar nuevos estados a un tipo de publicación.

WP usa register_post_status() para registrar los estados predeterminados de "publicado", "borrador", etc. en init utilizando la función create_initial_post_types() en wp-includes/post.php (http://hitchhackerguide.com/2011/02/11/create_initial_post_types/).

Mire el código en esos enlaces, y puede hacerse una idea de cómo usar la función.

¡Espero que eso lo ayude a comenzar!

2

se podría escribir un plugin si se sabe cómo. Usted tiene que cavar en la documentación o similares plugins como éste o ésta http://wordpress.org/extend/plugins/edit-flow/http://wordpress.org/extend/plugins/custom-post-type-ui/

Con "Ganchos, acciones y filtros" puede cambiar la interfaz de administración, consulte aquí http://codex.wordpress.org/Plugin_API

Hasta ahora he escritura solo un plugin simple y no sé los pasos exactos que debes seguir para lograr esto ...

¡Buena suerte!

+0

Gracias por su sugerencia Keyne, pero en este momento no tengo tiempo para investigar la API, actualmente estoy trabajando para un plazo límite para un cliente, así que tendré que apegarme a una solución de campo personalizada por el momento. Solo esperaba que alguien supiera cómo hacerlo y presentara un código de demostración sobre cómo hacerlo. – Brady

1
/** 
* PostStatusExtender 
* 
* @author Hyyan Abo Fakher<[email protected]> 
*/ 
class PostStatusExtender 
{ 

    /** 
    * Extend 
    * 
    * Extend the current status list for the given post type 
    * 
    * @global \WP_POST $post 
    * 
    * @param string $postType the post type name , ex: product 
    * @param array $states array of states where key is the id(state id) and value 
    *      is the state array 
    */ 
    public static function extend($postType, $states) 
    { 

     foreach ($states as $id => $state) { 
      register_post_status($id, $state); 
     } 

     add_action('admin_footer-post.php', function() use($postType, $states) { 

      global $post; 
      if (!$post || $post->post_type !== $postType) { 
       return false; 
      } 

      foreach ($states as $id => $state) { 

       printf(
         '<script>' 
         . 'jQuery(document).ready(function($){' 
         . ' $("select#post_status").append("<option value=\"%s\" %s>%s</option>");' 
         . ' $("a.save-post-status").on("click",function(e){' 
         . '  e.preventDefault();' 
         . '  var value = $("select#post_status").val();' 
         . '  $("select#post_status").value = value;' 
         . '  $("select#post_status option").removeAttr("selected", true);' 
         . '  $("select#post_status option[value=\'"+value+"\']").attr("selected", true)' 
         . ' });' 
         . '});' 
         . '</script>' 
         , $id 
         , $post->post_status !== $id ? '' : 'selected=\"selected\"' 
         , $state['label'] 
       ); 

       if ($post->post_status === $id) { 
        printf(
          '<script>' 
          . 'jQuery(document).ready(function($){' 
          . ' $(".misc-pub-section #post-status-display").text("%s");' 
          . '});' 
          . '</script>' 
          , $state['label'] 
        ); 
       } 
      } 
     }); 


     add_action('admin_footer-edit.php', function() use($states, $postType) { 

      global $post; 

      if (!$post || $post->post_type !== $postType) { 
       return false; 
      } 

      foreach ($states as $id => $state) { 
       printf(
         '<script>' 
         . 'jQuery(document).ready(function($){' 
         . " $('select[name=\"_status\"]').append('<option value=\"%s\">%s</option>');" 
         . '});' 
         . '</script>' 
         , $id 
         , $state['label'] 
       ); 
      } 
     }); 

     add_filter('display_post_states', function($states, $post) use($states, $postType) { 

      foreach ($states as $id => $state) { 
       if ($post->post_type == $postType && $post->post_status === $id) { 
        return array($state['label']); 
       } else { 
        if (array_key_exists($id, $states)) { 
         unset($states[$id]); 
        } 
       } 
      } 

      return $states; 
     }, 10, 2); 
    } 

} 

Y aquí cómo utilizar que

add_action('init', function() { 
    PostStatusExtender::extend(self::NAME, array(
     'sold' => array(
      'label' => __('Sold', 'viasit'), 
      'public' => true, 
      'exclude_from_search' => true, 
      'show_in_admin_all_list' => true, 
      'show_in_admin_status_list' => true, 
      'label_count' => _n_noop('Sold <span class="count">(%s)</span>', 'Sold <span class="count">(%s)</span>'), 
     ) 
    )); 
}); 

Editar: error tipográfico fijo en el código.

+0

Esto me acaba de dar una pantalla en blanco y no hice nada ... – Justin

Cuestiones relacionadas