Viewing 6 replies - 1 through 6 (of 6 total)
  • Plugin Author Ahmed Kaludi

    (@ahmedkaludi)

    We checked your issue. The /amp is redirecting to the non-amp. That’s’ why google is giving this error “Referenced AMP URL is not an AMP”.

    The amp URL is 301 redirecting to the homepage, Like this: https://prnt.sc/ubiy4t
    Can you please tell me are you set up 301 somewhere?

    Thread Starter panhwerwaseem121

    (@panhwerwaseem121)

    @ahmedkaludi no i haven’t done any kind of redirection 301 on these pages but i want to tell you one more thing that those post redirecting to non-amp version are child post like:
    Parent Post: https://www.vpnranks.com/reviews/vyprvpn/
    Child Post: https://www.vpnranks.com/reviews/vyprvpn/kodi/
    Parent post AMP version working fine but child post amp redirecting to non-amp i am sending you code which i use to create this custom posts hierarchy.

    add_action('registered_post_type', 'make_posts_hierarchical', 10, 2 );
    
    // Runs after each post type is registered
    function make_posts_hierarchical($post_type, $pto){
    
        // Return, if not post type posts
        if ($post_type != 'post') return;
    
        // access $wp_post_types global variable
        global $wp_post_types;
    
        // Set post type "post" to be hierarchical
        $wp_post_types['post']->hierarchical = 1;
    
        // Add page attributes to post backend
        // This adds the box to set up parent and menu order on edit posts.
        add_post_type_support( 'post', 'page-attributes' );
    
    }
    
    /**
     * Get parent post slug
     *
     * Helpful function to get the post name of a posts parent
     */
    function get_parent_post_slug($post) {
        if (!is_object($post) || !$post->post_parent) {
            return false;
        }
    
        return get_post($post->post_parent)->post_name;
    }
    
    /**
     *
     * Edit View of Permalink
     *
     * This affects editing permalinks, and $permalink is an array [template, replacement]
     * where replacement is the post_name and template has %postname% in it.
     *
     **/
    add_filter('get_sample_permalink', function($permalink, $post_id, $title, $name, $post) {
        if ($post->post_type != 'post' || !$post->post_parent) {
            return $permalink;
        }
    
        // Deconstruct the permalink parts
        $template_permalink = current($permalink);
        $replacement_permalink = next($permalink);
    
        // Find string
        if(!is_amp_endpoint()) {
            $postname_string = '/%postname%/';
        }else{
            $postname_string = '/%postname%/amp/';
        }
    
        // Get parent post
        $parent_slug = get_parent_post_slug($post);
    
        $altered_template_with_parent_slug = '/' . $parent_slug . $postname_string;
        $new_template = str_replace($postname_string, $altered_template_with_parent_slug, $template_permalink);
    
        $new_permalink = [$new_template, $replacement_permalink];
    
        return $new_permalink;
    }, 99, 5);
    
    /**
     * Alter the link to the post
     *
     * This affects get_permalink, the_permalink etc.
     * This will be the target of the edit permalink link too.
     *
     * Note: only fires on "post" post types.
     */
    add_filter('post_link', function($post_link, $post, $leavename){
    
        if ($post->post_type != 'post' || !$post->post_parent) {
            return $post_link;
        }
    
        $parent_slug = get_parent_post_slug($post);
        $new_post_link = str_replace($post->post_name, $parent_slug . '/' . $post->post_name, $post_link);
    
        return $new_post_link;
    }, 99, 3);
    
    /**
     * Before getting posts
     *
     * Has to do with routing... adjusts the main query settings
     *
     */
    add_action('pre_get_posts', function($query){
        global $wpdb, $wp_query;
    
        $original_query = $query;
        $uri = $_SERVER['REQUEST_URI'];
    
        // Do not do this post check all the time
        if ( $query->is_main_query() && !is_admin()) {
    
            // get the post_name
            $basename = basename($uri);
            // find out if we have a post that matches this post_name
            $test_query = sprintf("select * from $wpdb->posts where post_type = '%s' and post_name = '%s';", 'post', $basename);
            $result = $wpdb->get_results($test_query);
    
            // if no match, return default query, or if there's no parent post, this is not necessary
            if (!($post = current($result)) || !$post->post_parent) {
                return $original_query;
            }
    
            // get the parent slug
            $parent_slug = get_parent_post_slug($post);
            // concat the parent slug with the post_name to get most of the url
            $hierarchal_slug = $parent_slug . '/' . $post->post_name;
    
            // if the concat of parent-slug/post-name is not in the uri, this is not the right post.
            if (!stristr($uri, $hierarchal_slug)) {
                return $original_query;
            }
    
            // pretty high confidence that we need to override the query.
            $query->query_vars['post_type'] = ['post'];
            $query->is_home     = false;
            $query->is_page     = true;
            $query->is_single   = true;
            $query->queried_object_id = $post->ID;
            $query->set('page_id', $post->ID);
    
            return $query;
        }
    
    }, 1);
    
    Thread Starter panhwerwaseem121

    (@panhwerwaseem121)

    @ahmedkaludi I’m Waiting for your response kindly let me know if you have some kind of solution for that problem, i think that issue is because of Child post permalink can you help us out thanks

    Plugin Author Ahmed Kaludi

    (@ahmedkaludi)

    Since you have added a custom code and permalink structure, you have two options:

    1. Either you create a custom rewrite rule for this permalink
    or
    2. Use /?amp as an endpoint from the setting + Add the image for this.

    Thread Starter panhwerwaseem121

    (@panhwerwaseem121)

    @ahmedkaludi can you help me to do this: 1. Either you create a custom rewrite rule for this permalink

    because i can’t found a way to do this kind of stuff looking forward for your response

    Plugin Author Ahmed Kaludi

    (@ahmedkaludi)

    The first option is the complex and the second option is easy. If you set up /?amp as an endpoint on your child post page it works perfectly like this: https://prnt.sc/uctq5f
    We checked your page. Currently, it’s a valid AMP page. The Child Post page is redirecting to the AMP page : https://prnt.sc/ucykxy

Viewing 6 replies - 1 through 6 (of 6 total)
  • The topic ‘Referenced AMP URL is not an AMP’ is closed to new replies.