J'ai créé un type de message personnalisé nommé freebie dans la mesure où j'ai créé une section méta personnalisée dans laquelle un champ de saisie a été ajouté. Ce qui ne stocke pas les données saisies dans ce champ n’affiche pas non plus les valeurs saisies dans ce champ. J'ai joint le codage.
function adding_freebie_metabox($post) {
add_meta_box(
'my-meta-box'
, __('Freebie extra deatails', 'lwprjs')
, 'render_my_freebie_metabox'
, 'freebie'
, 'normal'
, 'default'
);
}
add_action('add_meta_boxes_freebie', 'adding_freebie_metabox');
// Add field
function render_my_freebie_metabox($meta_id) {
// make sure the form request comes from WordPress
wp_nonce_field(basename(__FILE__), 'freebie_meta_box_nonce');
?>
Enter freebie details such as URL of download and also demo URL
<table class="form-table">
<tbody>
<tr>
<th><label for="freebie-demo">Demo URL</label></th>
<td><input style="width: 100%" id="freebie-demo" name="freebie-demo"
type="text"
value="<?php get_post_meta( $post->ID, $meta_field['freebie-demo'], true ); ?>"></td>
</tr>
</tbody>
</table>
<?php
}
function food_save_meta_box_data($post_id) {
// verify meta box nonce
if (!isset($_POST['freebie_meta_box_nonce']) || !wp_verify_nonce($_POST['freebie_meta_box_nonce'], basename(__FILE__))) {
return;
}
// return if autosave
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
// Check the user's permissions.
if (!current_user_can('edit_post', $post_id)) {
return;
}
// store custom fields values
// cholesterol string
if (isset($_REQUEST['freebie-demo'])) {
update_post_meta($post_id, '_freebie_demo', sanitize_text_field($_POST['freebie-demo']));
}
}
add_action('save_post_freebie', 'food_save_meta_box_data');
En fonction de votre code, j'espère que vous avez déjà enregistré votre CPT (type de message personnalisé) fournissant une étiquette valide et des arguments avec la fonction:
register_post_type( 'freebie', $args );
Voici le code complet qui, votre méta-boîte personnalisée ne sera visible que par notre CPT "freebie" avec un champ de saisie pour enregistrer l'URL de démonstration pour ces publications CPT. Ajoutez les lignes de code ci-dessous à votre fichier functions.php
// Adding meta box for freebie custom post type
function demo_url_meta_box() {
add_meta_box(
'demo_url_meta_box',
__( 'Demo URL', '' ),
'demo_url_meta_box_callback',
'freebie',
'side',
'low'
);
}
add_action( 'add_meta_boxes_freebie', 'demo_url_meta_box' );
// Callback function of metabox
function demo_url_meta_box_callback( $post ) {
// Add a nonce field so we can check for it later.
wp_nonce_field( 'demo_url_nonce', 'demo_url_nonce' );
// postmeta key: _demo_url
$demo_url = get_post_meta( $post->ID, '_demo_url', true );
echo '<textarea style="width:100%" id="freebie-demo" name="freebie-demo">' . esc_attr( $demo_url ) . '</textarea>';
}
/**
* When the post is saved, saves our custom data.
*
* @param int $post_id
*/
function save_demo_url_meta_box_data( $post_id ) {
// Check if our nonce is set.
if ( ! isset( $_POST['demo_url_nonce'] ) ) {
return;
}
// Verify that the nonce is valid.
if ( ! wp_verify_nonce( $_POST['demo_url_nonce'], 'demo_url_nonce' ) ) {
return;
}
// If this is an autosave, our form has not been submitted, so we don't want to do anything.
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return;
}
// Check the user's permissions.
if ( isset( $_POST['post_type'] ) && 'page' == $_POST['post_type'] ) {
if ( ! current_user_can( 'edit_page', $post_id ) ) {
return;
}
}
else {
if ( ! current_user_can( 'edit_post', $post_id ) ) {
return;
}
}
/* OK, it's safe for us to save the data now. */
// Make sure that it is set.
if ( ! isset( $_POST['freebie-demo'] ) ) {
return;
}
// Sanitize user input.
$de_url = sanitize_text_field( $_POST['freebie-demo'] );
// Update the meta field in the database.
update_post_meta( $post_id, '_demo_url', $de_url );
}
// add meta box data when save_post is hooked
add_action( 'save_post', 'save_demo_url_meta_box_data' );
J'espère que ceci vous aidera !!!
Peut-être essayez-vous d'ajouter un modèle différent pour montrer cela.
add_filter( 'template_include', 'include_template_function', 1 );
Au dessus du php
function include_template_function( $template_path ) {
if ( get_post_type() == 'freebies-info' ) {
if ( is_single() ) {
// checks if the file exists in the theme first,
// otherwise serve the file from the plugin
if ( $theme_file = locate_template( array ( 'freebies-info.php' ) ) ) {
$template_path = $theme_file;
} else {
$template_path = plugin_dir_path( __FILE__ ) . '/freebies_info.php';
}
}
}
return $template_path;
}
Cette partie if ( get_post_type() == 'freebies-info' ) {
devrait être votre register_post_type
au lieu de freebies-info
Ce code permettant d'ajouter le fichier php, que j'ai utilisé par exemple freebies-info.php
. Ensuite, créez un fichier php appelé cela, dans le même dossier. Cela pourrait ressembler à ceci:
<?php
/*Template Name: New Template
*/
get_header(); ?>
<div id="primary">
<div id="content" role="main">
<?php
$mypost = array( 'post_type' => 'freebies-info', );
$loop = new WP_Query( $mypost );
?>
<?php while ( have_posts() ) : the_post();?>
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<header class="entry-header">
<strong>Title: </strong><?php the_title(); ?><br />
</header>
<div class="">
<?php the_content(); ?>
</div>
</article>
<?php endwhile; ?>
</div>
</div>
<?php wp_reset_query(); ?>
<?php get_footer(); ?>
Rappelez-vous que j'ai fait cette freebies-info pour yo.
$mypost = array( 'post_type' => 'freebies-info', );
Ici, vous devez mettre ce que vous avez appelé votre register_post_type
que vous pouvez trouver où vous avez créé votre type de message personnalisé.
J'espère que cela vous aide ou que vous avez d'autres idées pour y remédier, Goodluck!