web-dev-qa-db-fra.com

get_edit_post_link () ne fonctionne pas comme prévu une fois l'id passé dans le plugin

Donc, dans mon plugin, j'ai le code suivant. Il reçoit une question d'un custom_post. Je la traite ici afin que d'autres mises à jour puissent être effectuées avec AJAX/JSON et que la page ne doit être configurée que pour un type de source de données.

$observations = new WP_Query($args);  
if ( $observations-> have_posts() ) :
    $questionpost = $observations->posts[0];
    $question = array (
        'id' => $questionpost->ID,
        'title' => $questionpost->post_title,
        'name' =>  $questionpost->post_name,
        'excerpt' => $questionpost->post_excerpt,
        'content' => $questionpost->post_content,
        'code' => get_post_meta( $questionpost->ID, 'code', true ),
        'edit_link' => get_edit_post_link($questionpost->ID),
    );
    if ( has_post_thumbnail($questionpost->ID) ) {
        $question['thumbnail'] = get_the_post_thumbnail( $questionpost->ID, 'full', array('class' => 'card-img-top')); 
    } else {
        $question['thumbnail'] = get_template_directory_uri()."/img/no-image.png";
    }
    print_r($question);
}

Tout fonctionne bien, sauf pour le get_edit_post_link - voici print_r dump:

Array ( [id] => 208 [title] => Main ... pipework. [name] => nr-60 [excerpt] => [content] => The ... external. [code] => NR [edit_link] => [thumbnail] => http://.../img/no-image.png ) 

https://codex.wordpress.org/Function_Reference/edit_post_link suggère que nous puissions passer un ID afin que je ne vois pas pourquoi il est vide.

2
Davies-Barnard

Selon la fonction get_edit_post_link()source , cela peut se produire dans les conditions suivantes:

  • il n'y a pas un tel poste;
  • il n'y a pas un tel type de message;
  • vous n'avez pas assez d'autorisations pour éditer le post;
  • _edit_link a été modifié lors de l'enregistrement du type de message.

Les deux premiers ne sont pas le cas puisque l'ID est disponible. La quatrième est une mauvaise pratique: pas pour une utilisation générale - développeurs principaux recommandons vous ne l'utilisez pas lors de l'enregistrement de votre propre type de message .

Dans ce cas, l'utilisateur ne dispose pas d'autorisations suffisantes. Selon le commentaire du PO sur la question, il avait été déconnecté, ce qui est la même chose.

3
Max Yudin

C’est peut-être un des cas où certaines fonctions fonctionnent mieux dans le cadre de la boucle. Bien que vous utilisiez une boucle, vous n'utilisez pas réellement la fonctionnalité de boucle complète WP.

Essayez d’ajouter 'posts_per_page'=> 1 à votre $args pour n’obtenir qu’un message, puis de remplacer $questionpost = $observations->posts[0]; par la construction de boucle manquante, c’est-à-dire: while($observations->have_posts()) : $observations->the_post(); (sans oublier le endwhile; de clôture, bien sûr). Cela vous permettra ensuite d'utiliser les fonctions normales en boucle (par exemple, get_the_ID(), get_the_title(), etc.) et d'essayer d'utiliser get_edit_post_link() sans lui transmettre l'ID.

1
Peter HvD