it-swarm.com.de

Ist es möglich, einen Seitenlink von seiner Schnecke zu bekommen?

Ist es möglich, den Permalink einer Seite allein aus dem Slug zu erhalten? Mir ist bekannt, dass Sie den Permalink der Seite mit get_page_link() aus der ID abrufen können:

<a href="<?php echo get_page_link(40); ?>">Map</a>

Ich bin neugierig, ob es eine Möglichkeit gibt, dasselbe mit dem Block einer Seite zu tun - wie folgt:

<a href="<?php echo get_page_link('map'); ?>">Map</a>
110
Sampson

Du sprichst von Pages, oder? Keine Beiträge.

Ist es das wonach du suchst:

  1. get_permalink( get_page_by_path( 'map' ) )
  2. get_permalink( get_page_by_title( 'Map' ) )
  3. home_url( '/map/' )
176
zeo

Ich denke das könnte besser sein:

function get_page_by_slug($page_slug, $output = OBJECT, $post_type = 'page' ) {
    global $wpdb;
    $page = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type= %s", $page_slug, $post_type ) );
    if ( $page )
            return get_page($page, $output);
    return null;
}

nach dem muster von "original" get_page_by_title von wordpress . (Zeile 3173)

rgds

9
Matheus Eduardo

Dies ist eine Methode, die von Tom McFarlin in seinem Blog veröffentlicht wurde:

/**
 * Returns the permalink for a page based on the incoming slug.
 *
 * @param   string  $slug   The slug of the page to which we're going to link.
 * @return  string          The permalink of the page
 * @since   1.0
 */
function wpse_4999_get_permalink_by_slug( $slug, $post_type = '' ) {

    // Initialize the permalink value
    $permalink = null;

    // Build the arguments for WP_Query
    $args = array(
        'name'          => $slug,
        'max_num_posts' => 1
    );

    // If the optional argument is set, add it to the arguments array
    if( '' != $post_type ) {
        $args = array_merge( $args, array( 'post_type' => $post_type ) );
    }

    // Run the query (and reset it)
    $query = new WP_Query( $args );
    if( $query->have_posts() ) {
        $query->the_post();
        $permalink = get_permalink( get_the_ID() );
        wp_reset_postdata();
    }
    return $permalink;
}

Es funktioniert mit benutzerdefinierten Beitragstypen und integrierten Beitragstypen (z. B. post und page).

6
shea

die akzeptierte Antwort ist falsch, weil hierarchische Seiten nicht so funktionieren. Einfach ausgedrückt, der Slug ist nicht immer der Pfad der Seite oder des Posts. Z.B. Ihre Seite hat ein Kind usw. Der Pfad lautet parent-slug/child-slug und get_page_by_path kann auf diese Weise child-slug nicht finden. Die richtige Lösung lautet:

function mycoolprefix_post_by_slug($the_slug, $post_type = "page"){
 $args = array(
   'name'        => $the_slug,
   'post_type'   => $post_type,
   'post_status' => 'publish',
   'numberposts' => 1
 );
 $my_page = get_posts($args)[0];
 return $my_page;
}

<a href="<?php echo mycoolprefix_post_by_slug('map'); ?>">Map</a>
2
Toskan

Versuche dies:

<a href="<?php echo get_page_link( get_page_by_path( 'map' ) ); ?>">Map</a>

get_page_by_path( 'path' ) gibt ein Page/Post-Objekt zurück, das dann von get_page_link() verwendet werden kann, da es ein Post/Page-Objekt akzeptiert und einen Permalink zurückgibt.

1
Sigma Wadbude
    function theme_get_permalink_by_title( $title ) {

    // Initialize the permalink value
    $permalink = null;

    // Try to get the page by the incoming title
    $page = get_page_by_title( strtolower( $title ) );

    // If the page exists, then let's get its permalink
    if( null != $page ) {
        $permalink = get_permalink( $page->ID );
    } // end if

    return $permalink;

} // end theme_get_permalink_by_title

Verwenden Sie diese Funktion von

if( null == theme_get_permalink_by_title( 'Register For This Site' ) ) {
  // The permalink doesn't exist, so handle this however you best see fit.
} else {
  // The page exists, so do what you need to do.
} // end if/else
0
user46487