Nuevo estado de publicación para tipo de entrada personalizada

4 mar 2013, 19:34:58
Vistas: 33.8K
Votos: 18

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

Actualmente se está importando y guardando como 'Pendiente de revisión'. ¿Es posible crear otro estado de publicación llamado Aggregated que listará todas las noticias agregadas para ser publicadas?

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

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

Gracias por la ayuda con esto.

4
Comentarios

Creo que el código es correcto. Tal vez tienes esta fuente en otra función para llamarla. ¿Cuándo ejecutas el add_action()?

bueltge bueltge
4 mar 2013 21:36:55

¿Podrías explicar tu respuesta con más detalle? ¡Gracias!

AltDan AltDan
5 mar 2013 00:03:18

¿Está el add_action('init') dentro de una clase o función, donde llamas a otro hook? Es posible que lo inicies demasiado tarde y el hook init no pueda ejecutarse.

bueltge bueltge
5 mar 2013 16:13:38

¿Cómo resolviste este problema? Tengo exactamente el mismo problema ahora. Me gustaría agregar el nuevo estado personalizado al menú desplegable del área de administración de custom-post, que permite al usuario seleccionar (Revisión Pendiente, Borrador, NUEVO_ESTADO_PERSONALIZADO) de la lista de estados...

Greeso Greeso
24 ago 2013 12:19:41
Todas las respuestas a la pregunta 4
4
15

Hay una excelente descripción paso a paso sobre cómo hacerlo aquí https://www.jclabs.co.uk/create-custom-post-status-in-wordpress-using-register_post_status/

Para agregar tu estado de publicación personalizado al menú desplegable, simplemente añade lo siguiente al script de funciones de tu tema:

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\"> Agregado</span>';
      }
      echo '
      <script>
      jQuery(document).ready(function($){
           $("select#post_status").append("<option value=\"aggregated\" '.$complete.'>Agregado</option>");
           $(".misc-pub-section label").append("'.$label.'");
      });
      </script>
      ';
  }
}

¡Con esto tendrás tu estado de publicación personalizado funcionando en 5 minutos, me ahorró mucho tiempo!

8 nov 2013 19:21:43
Comentarios

El enlace está roto. Aquí está la versión más reciente en archive.org.

rinogo rinogo
1 ago 2019 05:55:24

@rinogo gracias amigo, cambié al enlace de archive.org que proporcionaste

Larzan Larzan
2 ago 2019 14:01:07

Aquí hay un enlace actualizado al artículo en el nuevo sitio web de James Collings: https://www.jclabs.co.uk/create-custom-post-status-in-wordpress-using-register_post_status/

joehanna joehanna
1 feb 2022 02:57:39

Gracias @joehanna, he actualizado el enlace :)

Larzan Larzan
3 feb 2022 12:58:17
0
10

Tu código debe ser sólido y debe agregar el estado deseado al array global $wp_post_statuses.

Sin embargo, si esperas que aparezca en el menú desplegable del administrador, este es un problema pendiente: https://core.trac.wordpress.org/ticket/12706

5 mar 2013 02:28:40
1
10

Registrar un estado de publicación "agregado" para el tipo de contenido personalizado "recetas":

register_post_status( 'aggregated', array(
                    'label'                     => _x( 'Agregado', 'etiqueta de estado de publicación', 'plugin-domain' ),
                    'public'                    => true,
                    'label_count'               => _n_noop( 'Agregados <span class="count">(%s)</span>', 'Agregados <span class="count">(%s)</span>', 'plugin-domain' ),
                    'post_type'                 => array( 'recipes' ), // Define uno o más tipos de publicación a los que se puede aplicar el estado.
                    '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 la pantalla de edición del tipo de contenido personalizado "recetas", agregar el estado de publicación personalizado en el desplegable del metabox de publicación y cambiar la etiqueta del botón "Guardar borrador" si el estado de publicación seleccionado 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    = 'Agregado';
        }

        $script = <<<SD

 
       jQuery(document).ready(function($){
           $("select#post_status").append("<option value=\"aggregated\" '.$complete.'>Agregado</option>");
           
           if( "{$post->post_status}" == "aggregated" ){
                $("span#post-status-display").html("$label");
                $("input#save-post").val("Guardar como Agregado");
           }
           var jSelect = $("select#post_status");
                
           $("a.save-post-status").on("click", function(){
                
                if( jSelect.val() == "aggregated" ){
                    
                    $("input#save-post").val("Guardar como Agregado");
                }
           });
      });
     

SD;

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

});

Agregar el estado de publicación personalizado en la pantalla de edición rápida de la cuadrícula de administración del tipo de contenido personalizado:

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\">Agregado</option>' );
    });
    </script>";
    }
});

Mostrar el total del estado de publicación personalizado en la cuadrícula de administración del tipo de contenido personalizado:

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

    if( $post->post_type == 'recipes') {
        if ( get_query_var( 'post_status' ) != 'aggregated' ) { // no para páginas con todas las publicaciones de este estado
            if ( $post->post_status == 'aggregated' ) {
                return array( 'Agregado' );
            }
        }
    }
    return $statuses;
});
14 sept 2018 22:57:22
Comentarios

Exactamente lo que estaba buscando. Sin embargo, aún falta el estado de publicación personalizado en el menú desplegable de estado para la edición masiva de publicaciones.

martin schwartz martin schwartz
4 sept 2019 19:39:01
0

Aquí está el código funcional para WP 6.2 sin usar JQuery

// 1. Registrar un estado de publicación "aggregated" (agregado)

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

// 2. En la pantalla de edición de entradas: agregar el estado personalizado al menú desplegable

add_action('admin_footer-post.php', 'append_post_status_list');
function append_post_status_list()
{
    global $post;

    if ($post->post_type != 'recipes') {
        return;
    }

    $selected = 'false';
    $setStatus = '';
    if ($post->post_status == 'aggregated') {
        $selected = 'true';
        $setStatus = 'document.getElementById("post-status-display").innerHTML = "Agregado";';
    }
    echo '
          <script>
            document.getElementById("post_status").appendChild(new Option("Agregado", "aggregated", ' . $selected . '));
            ' . $setStatus . '
          </script>
          ';
}

// 3. En la pantalla de edición rápida (página de listado): agregar el estado personalizado al menú desplegable

add_action('admin_footer-edit.php', function () {    
    global $post;
    if ($post->post_type != 'recipes') {
        return;
    }

    echo '
    <script>
        document.querySelectorAll("select[name=\"_status\"]").forEach((s) => {
            s.appendChild(new Option("Agregado", "aggregated"));
        });
    </script>';
});
31 mar 2023 13:28:47