常见的php函数由其他函数调用

时间:2016-09-07 15:57:09

标签: php wordpress function call

您好我想创建两个具有不同参数但具有相同公共功能的函数。这是我的榜样......

常用功能:

function my_responsive_pictures($post_id){
// Get alt text or set the $alt_text variable to the post title if no alt text exists
$alt_text = get_post_meta($attachment_id, '_wp_attachment_image_alt', true);
if ( !$alt_text ) { $alt_text = esc_html( get_the_title($post_id) ); }

// Get the info for each image size including the original (full)
$thumb_original = wp_get_attachment_image_src($attachment_id, 'slideshow');
$thumb_large    = wp_get_attachment_image_src($attachment_id, 'slideshow-lg');
$thumb_medium   = wp_get_attachment_image_src($attachment_id, 'slideshow-md');
$thumb_small    = wp_get_attachment_image_src($attachment_id, 'slideshow-xs');

// Create array containing each image size + the alt tag
$thumb_data = array(
'thumb_original' => $thumb_original[0],
'thumb_large'    => $thumb_large[0],
'thumb_medium'   => $thumb_medium[0],
'thumb_small'    => $thumb_small[0],
'thumb_alt'      => $alt_text
);

// Echo out <picture> element based on code from above
echo '<picture>';
echo '<!--[if IE 9]><video style="display: none;"><![endif]-->'; // Fallback to <video> element for IE9
echo '<source srcset="' . $thumb_data['thumb_large'] . ', ' . $thumb_data['thumb_original'] . ' x2" media="(min-width: 800px)">';
echo '<source srcset="' . $thumb_data['thumb_medium'] . ', ' . $thumb_data['thumb_large'] . ' x2" media="(min-width: 400px)">'; 
echo '<source srcset="' . $thumb_data['thumb_small'] . ', ' . $thumb_data['thumb_medium'] . ' x2">'; 
echo '<!--[if IE 9]></video><![endif]-->'; // Fallback to <video> element for IE9
echo '<img srcset="' . $thumb_data['thumb_small'] . ', ' . $thumb_data['thumb_medium'] . ' x2" alt="' . $thumb_data['thumb_alt'] . '">';
echo '</picture>';
}

另一个调用公共函数的人:

function my_responsive_thumbnail($post_id){
// Get the featured image ID
$attachment_id = get_post_thumbnail_id($post_id);
my_responsive_pictures();
}

第二个带有其他参数$ attachment_ID:

function my_responsive_acfthumbnail($post_id){
// Get the featured image ID
$attachment_id = get_field('image_bandeau');
my_responsive_pictures();
}

什么都没发生:(。我做错了什么?感谢你的帮助......

2 个答案:

答案 0 :(得分:0)

您的功能需要一个参数,当您在此处调用

my_responsive_pictures();

你没有通过任何东西。

您还必须先调用my_responsive_thumbnail()函数,然后再调用您的&#34; common&#34;功能

答案 1 :(得分:0)

此代码存在一些问题。我们需要关注的第一件事是主要功能。

function my_responsive_pictures($post_id){

您的功能定义没有给$post_id一个默认值,因此只要您调用该功能就需要它。通过尝试在不传递参数的情况下调用函数,您将触发错误。

$alt_text = get_post_meta($attachment_id, '_wp_attachment_image_alt', true);
if ( !$alt_text ) { $alt_text = esc_html( get_the_title($post_id) ); }

此处您指的是尚未设置的$attachment_id。如果找不到,那么你就会获得帖子的标题。

为此,您需要为该功能设置两个参数。

function my_responsive_pictures( $attachment_id, $post_id ) {

每当我们调用此函数时,我们都需要传递$attachment_id(图片的ID)和$post_id(帖子的ID)。

接下来我们需要修改最终调用main函数的函数。

function my_responsive_thumbnail( $post_id ) {
    // Get the featured image ID
    $attachment_id = get_post_thumbnail_id( $post_id );

    // Now that we have the featured image ID, we really ought
    // to do some error checking. Let's assume that all went well.
    my_responsive_pictures( $attachment_id, $post_id );
}

下一个功能需要更多关注。请记住,您使用帖子ID调用这些函数。您需要让get_field()知道应该检索图片的帖子的ID。

function my_responsive_acfthumbnail( $post_id ) {
    // Get the featured image ID
    $attachment_id = get_field( 'image_bandeau', $post_id );
    my_responsive_pictures( $attachment_id, $post_id );
}

使用示例:

my_responsive_acfthumbnail( get_the_ID() );

您可能还需要考虑为帖子ID设置默认值,以便在检索您正在查看的当前帖子的图片时不需要将其传入。

最后,考虑调用my_responsive_pictures的函数之间的重复级别。您将要检查附件ID是否有效,因此功能可能会变得更大,只有1行不同。

有关get_field()的更多信息:https://www.advancedcustomfields.com/resources/get_field/