web-dev-qa-db-fra.com

Utilisation d'un type de publication personnalisé pour un flux RSS uniquement

J'ai eu une demande d'un client qui me cause un peu mal à la tête! Ils veulent un flux RSS qui montre un contenu qui ne figure nulle part sur le site.

J'ai enregistré un nouveau type de message personnalisé (code simplifié);

$alert_args = array( 
    'public' => false, 
    'show_ui' => true,
    'label' => 'Alerts', 
    'has_archive' => true, 
    'supports' => array( 'title', 'editor' ),
);
register_post_type( 'alerts', $alert_args );

Pour que le flux RSS fonctionne, il semble que l'argument public soit défini sur TRUE, mais je ne souhaite pas que ces publications soient indexées par Google ou utilisées par les visiteurs du site Web. Avez-vous une idée de la façon dont le flux RSS peut fonctionner de manière autonome?

Merci Dan.

---MODIFIER---

S'il vous plaît noter que finalement j'ai eu le changement get_post_type() à get_query_var( 'post_type' ) parce que l'ancien ne fonctionne pas avec les pages de modèle d'archive. Voir le code;

if( 'alerts' === get_query_var( 'post_type' ) && ! is_feed() )
{
    $GLOBALS[ 'wp_query' ]->set_404();
    status_header( 404 );
    nocache_headers();
}   
1
Dan

Vous pouvez essayer de forcer un 404 en utilisant cette méthode :

/**
 * Force 404 on all "alerts" custom post type pages except for the feed
 *
 * @see https://wordpress.stackexchange.com/a/162303/26350
 */

add_action( 'template_redirect', function() {
    if( 'alerts' === get_post_type() && ! is_feed() )
    {
        $GLOBALS['wp_query']->set_404();
        status_header( 404 );
        nocache_headers();
    }   
} );

avec la configuration suivante:

$alert_args = array( 
    'public'              => true, 
    'show_ui'             => true,
    'has_archive'         => true, 
    'exclude_from_search' => true,
    'label'               => 'Alerts', 
    'supports'            => array( 'title', 'editor' ),
);

register_post_type( 'alerts', $alert_args );

pour autoriser uniquement l'accès au flux pour le type de publication personnalisé alerts.

Vous pouvez également envisager d’ajouter une vérification ! is_user_logged_in() supplémentaire si vous souhaitez autoriser les utilisateurs connectés à afficher les alertes ou ! current_user_can( 'some_capability' ) pour une fonctionnalité utilisateur exigence.

0
birgire