it-swarm.com.de

Erlaube Facebook, Beiträge vor der Veröffentlichung in der Vorschau anzuzeigen

Ich möchte Facebook (Benutzeragent facebookexternalhit) erlauben, auf geplante Posts zuzugreifen, bevor diese veröffentlicht werden, damit es auf Metainformationen zugreifen kann, um einen Status zu planen. Momentan veröffentliche ich vorübergehend Posts, plane den Facebook-Status und hebe die Veröffentlichung und den Zeitplan für Posts über WordPress auf.

Wenn ein WordPress-Beitrag geplant ist, können Redakteure auf die vorveröffentlichte Seite zugreifen, aber allen anderen wird ein 404 angezeigt, wenn die URL besucht wird. Wie kann ich einem bestimmten Benutzeragenten (z. B. Facebook) den Zugriff auf Posts gewähren, bevor diese veröffentlicht werden?

2
prunmit

Erstelle ein neues Plugin mit folgendem Code:

class Facebook_Peeker {
    private static $facebook_bots = [
        'facebookexternalhit/1.1 (+https://www.facebook.com/externalhit_uatext.php)',
        'facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)'
    ];

    private $original_posts;

    public function make_scheduled_post_public() {
        add_filter( 'posts_results', [ &$this, 'peek_into_private' ], null, 2 );
    }

    public function peek_into_private( $posts, &$query ) {
        if ( sizeof( $posts ) != 1 ) {
            return $posts;
        }

        $status = get_post_status_object( get_post_status( $posts[0] ) );
        if ( $status->public ) {
            return $posts;
        }

        $this->original_posts = $posts;
        add_filter( 'the_posts', [ &$this, 'override_private' ], null, 2 );
    }

    public function override_private( $posts, &$query ) {
        remove_filter( 'the_posts', [ &$this, 'peek_into_private' ], null, 2 );
        return $this->original_posts;
    }

    private function is_facebook_seeking() {
        return in_array( $_SERVER[ 'HTTP_USER_AGENT' ], self::$facebook_bots );
    }

    public static function init() {
        if ( ! self::is_facebook_seeking() ) {
            return;
        }

        $peeker = new Facebook_Peeker();
        $peeker->make_scheduled_post_public();
    }
}

add_action( 'plugins_loaded', [ 'Facebook_Peeker', 'init' ] );

Auf diese Weise kann der Facebook-Bot geplante Beiträge sehen, der Rest der Öffentlichkeit jedoch nicht. Denken Sie daran, alle relevanten Caching-Einstellungen zu aktualisieren, wenn Sie andere Plugins verwenden.

Antwort abgeleitet mit Hilfe von Wie kann die geplante Post-Vorschau für jedermann sichtbar gemacht werden? und Wie erkennt man Facebook-User- Agent .

1
prunmit