J'ai une question. J'ai un type de message personnalisé appelé Lieu. J'ai une situation qui peut être mise en place. Je veux avoir un champ personnalisé parent_place
où je pourrais choisir un parent de lieu.
Le lieu ne peut avoir aucun parent ou un seul parent.
Est-il possible de répertorier tous les articles (type = place
) dans un champ personnalisé et d'en choisir un? Dans les plugins pour les champs personnalisés, je peux choisir une boîte de dépôt, une radio, etc., mais je dois saisir des valeurs. Comment puis-je remplir automatiquement une liste de tous les articles de type Place?
Cela dépend du plugin que vous utilisez pour générer vos champs personnalisés.
Par exemple, le plugin Champs personnalisés avancés a cette option intégrée - le type de champ est appelé " Objet de publication ".
Documentation:
ACF > Types de champs > Post Object
Capture d'écran:
Comme le souligne Michal Mau, ACF est facile et efficace d’automatiser ce type de gestion Custom Field/Meta Box.
Le mode manuel utilise les crochets d'action add_meta_box
et save_post
. Dans cet exemple, vous devrez ajuster les tableaux indiqués pour simplement array( 'place' )
. Vérifiez les commentaires pour plus de détails:
add_action( 'add_meta_boxes', 'add_custom_box_wpse_94701' );
add_action( 'save_post', 'save_postdata_wpse_94701', 10, 2 );
function add_custom_box_wpse_94701()
{
// Post types to insert the meta box. Adjust array <-------
foreach( array( 'post', 'portfolio' ) as $pt )
add_meta_box(
'sectionid_wpse_94701',
__( 'Custom parent' ),
'blogroll_box_wpse_94701',
$pt,
'side'
);
}
function blogroll_box_wpse_94701()
{
global $post, $typenow;
// Get all posts of a type, excluding the current post
$args = array(
'numberposts' => -1,
'post_type' => $typenow,
'post_status' => 'publish,future',
'exclude' => $post->ID,
);
$get_posts = get_posts( $args );
$saved = get_post_meta( $post->ID, 'custom_parent', true);
// Security
wp_nonce_field( plugin_basename( __FILE__ ), 'noncename_wpse_94701' );
// Dropdown
echo '<select name="custom_parent" id="custom_parent">
<option value="">- Select -</option>';
foreach ( $get_posts as $parent_post )
{
printf(
'<option value="%d" %s> %s</option>',
$parent_post->ID,
selected( $saved, $parent_post->ID, false),
$parent_post->post_title
);
}
echo '</select>';
}
function save_postdata_wpse_94701( $post_id, $post_object )
{
// Verify auto save
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
// Security
if (
!isset( $_POST['noncename_wpse_94701'] )
|| !wp_verify_nonce( $_POST['noncename_wpse_94701'], plugin_basename( __FILE__ ) )
)
return;
// Allowed post types. Adjust array <-------
$allowed_post_types = array( 'post', 'portfolio' );
if ( !in_array( $post_object->post_type, $allowed_post_types ) )
return;
// Process post data
if ( isset( $_POST['custom_parent'] ) )
update_post_meta( $post_id, 'custom_parent', $_POST['custom_parent'] );
else
delete_post_meta( $post_id, 'custom_parent' );
}