Nuevo estado de publicación para tipo de publicación personalizada

13

Tengo un tipo de publicación personalizada recipes. Estoy usando un script cron para agregar automáticamente noticias a la base de datos.

Actualmente se está importando y guardando como 'Revisión pendiente'. ¿Es posible crear otro estado de publicación llamado Aggregatedque enumere todas las noticias agregadas que se publicarán?

Intenté usar la register_post_statusfunción, sin embargo, esto no pareció funcionar:

function custom_post_status(){
    register_post_status( 'aggregated', array(
        'label'                     => _x( 'Aggregated', 'recipes' ),
        'public'                    => false,
        'exclude_from_search'       => true,
        'show_in_admin_all_list'    => true,
        'show_in_admin_status_list' => true,
        'label_count'               => _n_noop( 'Aggregated <span class="count">(%s)</span>', 'Aggregated <span class="count">(%s)</span>' ),
    ) );
}
add_action( 'init', 'custom_post_status' );

Gracias por ayudarme con esto.

dclawson
fuente
Creo que el código es correcto. Quizás tenga esta fuente en otra función para llamar a esto. ¿Cuándo ejecutar add_action ()?
bueltge
¿Podría explicar su respuesta con más detalles? ¡Gracias!
dclawson
Es el add_action ('init' dentro de una clase o función, allí llamas sobre otro gancho. Es posible que comiences esto a lat y el gancho init no puede ni disparar.
bueltge
¿Cómo resolvió este problema? Tengo exactamente el mismo problema ahora. Me gusta agregar el nuevo estado personalizado a la lista desplegable del área de administración de publicaciones personalizadas, que permite al usuario seleccionar (Pendig Reveiw, Draft, NEW_CUSTOM_STATUS) de la lista de Stati ...
Greeso

Respuestas:

9

Hay una excelente descripción paso a paso sobre cómo hacer eso aquí http://jamescollings.co.uk/blog/wordpress-create-custom-post-status/

Para agregar el estado de su publicación personalizada al menú desplegable, simplemente agregue lo siguiente a su script de función de temas:

add_action('admin_footer-post.php', 'jc_append_post_status_list');
function jc_append_post_status_list(){
 global $post;
 $complete = '';
 $label = '';
 if($post->post_type == 'recipes'){
      if($post->post_status == 'aggregated'){
           $complete = ' selected=\"selected\"';
           $label = '<span id=\"post-status-display\"> Aggregated</span>';
      }
      echo '
      <script>
      jQuery(document).ready(function($){
           $("select#post_status").append("<option value=\"aggregated\" '.$complete.'>Aggregated</option>");
           $(".misc-pub-section label").append("'.$label.'");
      });
      </script>
      ';
  }
}

Con esto tienes tu estado de publicación personalizado funcionando en 5 minutos, ¡me ahorraste mucho tiempo!

Larzan
fuente
1
El enlace está roto. Aquí está la versión más reciente en archive.org .
rinogo
@rinogo gracias hombre, cambió al enlace archive.org que proporcionó
Larzan
7

Su código debe ser sólido y debe agregar el estado deseado a la matriz global $ wp_post_statuses.

Sin embargo, si espera que aparezca en el menú desplegable de administración, este es un problema continuo: https://core.trac.wordpress.org/ticket/12706

Vancoder
fuente
1

Registre un estado de publicación "agregado" para el tipo de publicación personalizada "recetas":

register_post_status( 'aggregated', array(
                    'label'                     => _x( 'Aggregated ', 'post status label', 'bznrd' ),
                    'public'                    => true,
                    'label_count'               => _n_noop( 'Aggregated s <span class="count">(%s)</span>', 'Aggregated s <span class="count">(%s)</span>', 'plugin-domain' ),
                    'post_type'                 => array( 'recipes' ), // Define one or more post types the status can be applied to.
                    'show_in_admin_all_list'    => true,
                    'show_in_admin_status_list' => true,
                    'show_in_metabox_dropdown'  => true,
                    'show_in_inline_dropdown'   => true,
                    'dashicon'                  => 'dashicons-businessman',
                ) );

En el metabox de publicación de la pantalla de edición de publicaciones personalizadas "recetas", agregue el estado de la publicación personalizada en el menú desplegable y cambie la etiqueta del botón "Guardar borrador" si el estado de la publicación seleccionada es "agregado":

add_action('admin_footer-post.php',function(){

    global $post;
    $complete = '';
    $label = '';

    if($post->post_type == 'recipes') {

        if ( $post->post_status == 'aggregated' ) {
            $complete = ' selected=\"selected\"';
            $label    = 'Aggregated';
        }

        $script = <<<SD


       jQuery(document).ready(function($){
           $("select#post_status").append("<option value=\"aggregated\" '.$complete.'>Aggregated</option>");

           if( "{$post->post_status}" == "aggregated" ){
                $("span#post-status-display").html("$label");
                $("input#save-post").val("Save Aggregated");
           }
           var jSelect = $("select#post_status");

           $("a.save-post-status").on("click", function(){

                if( jSelect.val() == "aggregated" ){

                    $("input#save-post").val("Save Aggregated");
                }
           });
      });


SD;

        echo '<script type="text/javascript">' . $script . '</script>';
    }

});

Agregue el estado de publicación personalizada en la pantalla de edición rápida de la cuadrícula de administración de publicación personalizada:

add_action('admin_footer-edit.php',function() {
    global $post;
    if( $post->post_status == 'recipes' ) {
        echo "<script>
    jQuery(document).ready( function() {
        jQuery( 'select[name=\"_status\"]' ).append( '<option value=\"aggregated\">Aggregated</option>' );
    });
    </script>";
    }
});

Muestra el total del estado de la publicación personalizada en la cuadrícula de administración de la publicación personalizada:

add_filter( 'display_post_states', function( $statuses ) {
    global $post;

    if( $post->post_type == 'recipes') {
        if ( get_query_var( 'post_status' ) != 'aggregated' ) { // not for pages with all posts of this status
            if ( $post->post_status == 'aggregated' ) {
                return array( 'Aggregated' );
            }
        }
    }
    return $statuses;
});
sudip
fuente
Exactamente lo que estaba buscando. Sin embargo, aún se pierde el estado de la publicación personalizada en el menú desplegable de estado de edición de publicación masiva.
martin schwartz