web-dev-qa-db-fra.com

Modifier les propriétés de type de publication intégrées

J'ai une situation inhabituelle où je dois rendre le type de message intégré 'page' non hiérarchique.

J'ai imprimé l'objet postier avec var_dump(get_post_type_object('page')); die; et j'ai eu ceci:

object(stdClass)#164 (26) {
  ["labels"]=>
  ...
  }
  ["description"]=>
  string(0) ""
  ["publicly_queryable"]=>
  bool(false)
  ["exclude_from_search"]=>
  bool(false)
  ["capability_type"]=>
  string(4) "page"
  ["map_meta_cap"]=>
  bool(true)
  ["_builtin"]=>
  bool(true)
  ["_edit_link"]=>
  string(16) "post.php?post=%d"
  ["hierarchical"]=>
  bool(true)
  ....
}

Comment puis-je modifier la valeur de l'objet post-type afin que ["hierarchical"]=>bool(false)?

3
Niels

C'est une réponse assez tardive, mais je cherchais à faire quelque chose de similaire et je l'ai compris. Je voulais obtenir nav_menu_items dans un flux RSS, ce qui nécessitait de modifier la propriété intégrée de type de message nav_menu_item publiquement_queryable.

Quoi qu'il en soit, c'était en fait assez simple, voici une fonction générique pour le faire:

function change_wp_object() {
  $object = get_post_type_object('post_type');
  $object->property = true;
}
add_action('init','change_wp_object');

Et c'est tout. Je l'ai dans un plugin. Si vous voulez voir la liste des propriétés disponibles à changer, jetez-y

echo '<pre>'.print_r($object, 1).'</pre>';

pour obtenir une sortie bien formatée de toutes les propriétés.

Dans votre cas, vous utiliseriez

$object-> hierarchical = false;

J'espère que ça aide quelqu'un!

2
Jarrod

Autant que je sache, il n’existe aucun (bon) moyen de modifier les types de publication de base. L'alternative est bien sûr de créer votre propre type de message personnalisé. Si vous avez plusieurs publications qui constituent le type de page principal, vous pouvez exécuter une requête MySQL pour les convertir toutes en une fois dans le nouveau type de publication, une fois créées, le cas échéant. Ou, vous pouvez éventuellement changer la façon dont votre thème affiche une liste de pages.

Pour créer un nouveau type de message qui ne soit pas hiérarchique:

add_action( 'init', 'create_post_type' );
function create_post_type() {
    register_post_type( 'nonhierarchical_page',
        array(
            'labels' => array(
                'name' => __( 'NHPages' ),
                'singular_name' => __( 'NHPage' )
            ),
            'public' => true,
            'hierarchical' => false
        )
    );
}
0
miahelf